diff --git a/FrameLayoutKit.podspec b/FrameLayoutKit.podspec index c465252..32e9fa4 100644 --- a/FrameLayoutKit.podspec +++ b/FrameLayoutKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FrameLayoutKit' - s.version = '5.2.4' + s.version = '5.2.5' s.summary = 'FrameLayoutKit is a super fast and easy to use layout kit' s.description = <<-DESC An auto layout kit helps you to layout your UI easier, faster and more effective diff --git a/FrameLayoutKit/Classes/StackFrameLayout.swift b/FrameLayoutKit/Classes/StackFrameLayout.swift index 8a88e02..203fa92 100644 --- a/FrameLayoutKit/Classes/StackFrameLayout.swift +++ b/FrameLayoutKit/Classes/StackFrameLayout.swift @@ -378,7 +378,7 @@ open class StackFrameLayout: FrameLayout { var maxHeight: CGFloat = 0 switch distribution { - case .left, .right, .top, .bottom: + case .left, .right, .top, .bottom, .center: var flexibleFrames = [FrameLayout]() for frameLayout in activeFrameLayouts { if frameLayout.isEmpty { continue } @@ -418,39 +418,22 @@ open class StackFrameLayout: FrameLayout { break - case .equal, .center: + case .equal: let visibleFrameLayouts = visibleFrames() - var flexibleFrames = [FrameLayout]() - frameContentSize = CGSize(width: contentSize.width / CGFloat(visibleFrameLayouts.count), height: contentSize.height) + let visibleFrameCount = visibleFrameLayouts.count + let spaces = CGFloat(visibleFrameCount - 1) * spacing + let contentWidth = contentSize.width - spaces + let cellWidth = contentWidth / CGFloat(visibleFrameCount) - for frameLayout in visibleFrameLayouts { - if frameLayout.isFlexible { - flexibleFrames.append(frameLayout) - continue - } - - frameContentSize = frameLayout.sizeThatFits(frameContentSize) + visibleFrameLayouts.forEach { + frameContentSize = CGSize(width: cellWidth, height: contentSize.height).limitTo(minSize: $0.minSize, maxSize: $0.maxSize) + frameContentSize = $0.sizeThatFits(frameContentSize) - gapSpace = frameContentSize.width > 0 && frameLayout != lastFrameLayout ? spacing : 0 + gapSpace = frameContentSize.width > 0 && $0 != lastFrameLayout ? spacing : 0 totalSpace += frameContentSize.width + gapSpace maxHeight = max(maxHeight, frameContentSize.height) } - let flexibleFrameCount = flexibleFrames.count - if flexibleFrameCount > 0 { - let remainingSpace = CGFloat(flexibleFrameCount - 1) * spacing - let remainingWidth = contentSize.width - totalSpace - remainingSpace - let cellWidth = remainingWidth / CGFloat(flexibleFrameCount) - - flexibleFrames.forEach { - frameContentSize = CGSize(width: cellWidth, height: contentSize.height) - frameContentSize = $0.sizeThatFits(frameContentSize) - - totalSpace += frameContentSize.width - maxHeight = max(maxHeight, frameContentSize.height) - } - } - break case .split(let ratio): @@ -762,11 +745,11 @@ open class StackFrameLayout: FrameLayout { let visibleFrameLayouts = visibleFrames() let visibleFrameCount = visibleFrameLayouts.count let spaces = CGFloat(visibleFrameCount - 1) * spacing - let cellSize = (containerFrame.width - spaces) / CGFloat(Float(visibleFrameCount)) + let cellWidth = (containerFrame.width - spaces) / CGFloat(Float(visibleFrameCount)) if isOverlapped { for frameLayout in frameLayouts { - frameContentSize = frameLayout.isFlexible ? containerFrame.size : CGSize(width: cellSize, height: containerFrame.height).limitTo(minSize: frameLayout.minSize, maxSize: frameLayout.maxSize) + frameContentSize = frameLayout.isFlexible ? containerFrame.size : CGSize(width: cellWidth, height: containerFrame.height).limitTo(minSize: frameLayout.minSize, maxSize: frameLayout.maxSize) targetFrame.origin.x = containerFrame.minX targetFrame.size.width = frameContentSize.width @@ -777,14 +760,15 @@ open class StackFrameLayout: FrameLayout { } for frameLayout in frameLayouts { - frameContentSize = CGSize(width: cellSize, height: containerFrame.height) + frameContentSize = CGSize(width: cellWidth, height: containerFrame.height).limitTo(minSize: frameLayout.minSize, maxSize: frameLayout.maxSize) targetFrame.origin.x = containerFrame.minX + usedSpace targetFrame.size.width = frameContentSize.width frameLayout.frame = targetFrame if frameLayout.isEmpty { continue } - usedSpace += frameContentSize.width + spacing + gapSpace = frameContentSize.width > 0 ? spacing : 0 + usedSpace += frameContentSize.width + gapSpace } break