Skip to content

Commit e45a215

Browse files
committed
put operation pixel perfect layout fix
1 parent 297611c commit e45a215

File tree

1 file changed

+38
-17
lines changed

1 file changed

+38
-17
lines changed

Sources/PutWrap.swift

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -270,36 +270,57 @@ private func putOperation<T: BoxDimension>(_ superview: Layoutable, intentions:
270270
let unoSize = totalSizeForFlexs/totalWeight
271271

272272
var start = T.getDimension(bounds).origin
273+
274+
var dims = [(PutIntention, Dimension)]()
275+
273276
for i in intentions {
274277
switch (i) {
275-
case .flex(let views, let weight):
276-
278+
case .flex(_, let weight):
277279
let newSize = weight * unoSize
278-
280+
dims.append((i, Dimension(origin: start.pixelPerfect, size: newSize)))
281+
start += newSize
282+
case .fix(let views, let strategy):
283+
let newSize = strategy.calculateValue(forViews: views, dimension: dimension)
284+
dims.append((i, Dimension(origin: start.pixelPerfect, size: newSize)))
285+
start += newSize
286+
}
287+
}
288+
289+
var fixedDims = [Dimension]()
290+
291+
dims.enumerated().forEach { (index, d) in
292+
293+
switch d.0 {
294+
case .flex:
295+
let origin = d.1.origin
296+
if index < (dims.count - 1) {
297+
fixedDims.append(Dimension(origin: origin, size: dims[index + 1].1.origin - origin))
298+
} else {
299+
fixedDims.append(Dimension(origin: origin, size: T.getDimension(bounds).origin + T.getDimension(bounds).size - origin))
300+
}
301+
case .fix:
302+
fixedDims.append(d.1)
303+
}
304+
}
305+
306+
intentions.enumerated().forEach { (index, i) in
307+
switch (i) {
308+
case .flex(let views, _):
309+
279310
if let views = views {
280311
views.forEach { view in
281312
let fr = view.lx_frame
282-
view.updateFrame(T.setDimension(Dimension(origin: start, size: newSize), inRect: fr))
313+
view.updateFrame(T.setDimension(fixedDims[index], inRect: fr))
283314
}
284-
285-
start += newSize
286-
} else {
287-
start += newSize
288315
}
289316

290-
totalWeight += weight
291-
case .fix(let views, let strategy):
292-
let value = strategy.calculateValue(forViews: views, dimension: dimension)
293-
317+
case .fix(let views, _):
294318
views?.forEach {
295319
let fr = $0.lx_frame
296-
$0.updateFrame(T.setDimension(Dimension(origin: start, size: value), inRect: fr))
297-
}
298-
start += value
320+
$0.updateFrame(T.setDimension(fixedDims[index], inRect: fr))
321+
}
299322
}
300323
}
301-
302-
303324
}
304325

305326
extension Layouting where Base: Layoutable {

0 commit comments

Comments
 (0)