@@ -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
305326extension Layouting where Base: Layoutable {
0 commit comments