@@ -67,10 +67,6 @@ open class HStackView: UIView, StackView {
6767 }
6868 }
6969
70- open var effectiveSubviews : [ UIView ] {
71- subviews. filter { $0. _isEffectiveView }
72- }
73-
7470 public var contentSize : CGSize {
7571 let h = effectiveSubviews. map ( { $0. frame } ) . reduce ( CGRect . zero) { result, rect in
7672 result. union ( rect)
@@ -91,11 +87,7 @@ open class HStackView: UIView, StackView {
9187 }
9288 }
9389
94- open override func layoutSubviews( ) {
95- super. layoutSubviews ( )
96-
97- tryResizeStackView ( )
98-
90+ private func makeSubviewsAlignment( ) {
9991 switch alignment {
10092 case . top:
10193 effectiveSubviews. forEach { $0. frame. origin. y = _stackContentRect. minY }
@@ -104,6 +96,14 @@ open class HStackView: UIView, StackView {
10496 case . bottom:
10597 effectiveSubviews. forEach { $0. frame. origin. y = _stackContentRect. maxY - $0. frame. height }
10698 }
99+ }
100+
101+ open override func layoutSubviews( ) {
102+ super. layoutSubviews ( )
103+
104+ tryResizeStackView ( )
105+
106+ makeSubviewsAlignment ( )
107107
108108 switch distribution {
109109 case . spacing( let spacing) :
@@ -180,7 +180,7 @@ extension HStackView {
180180 private func makeSpacing( _ spacing: CGFloat ) {
181181 for (index, subview) in effectiveSubviews. enumerated ( ) {
182182 if index == 0 {
183- subview. frame. origin. x = _stackContentRect . minX
183+ subview. frame. origin. x = paddingLeft
184184 } else {
185185 let previousView = effectiveSubviews [ index - 1 ]
186186 if ( previousView as? SpacerView ) != nil || ( subview as? SpacerView ) != nil { // spacer and view no spacing
@@ -197,19 +197,18 @@ extension HStackView {
197197 frame. size. height = contentSize. height
198198 }
199199 for subview in effectiveSubviews {
200- let oldHeight = subview. frame. height
201200 subview. frame. size. height = _stackContentWidth
202201
203202 // fix #https://github.com/iWECon/StackKit/issues/21
204203 guard alignment == . center else {
205204 continue
206205 }
207- subview. frame . origin . y -= ( _stackContentWidth - oldHeight ) / 2
206+ subview. center . y = _stackContentRect . midY
208207 }
209208 }
210209
211210 private func fillWidth( ) {
212- let maxW = frame. width - lengthOfAllFixedLengthSpacer( ) - dividerSpecifyLength ( )
211+ let maxW = frame. width - lengthOfAllFixedLengthSpacer( ) - lengthOfAllFixedLengthDivider ( )
213212 var w = ( maxW) / CGFloat( viewsWithoutSpacerAndDivider ( ) . count)
214213
215214 let unspacersView = viewsWithoutSpacerAndDivider ( )
@@ -223,12 +222,6 @@ extension HStackView {
223222// MARK: Divider
224223extension HStackView {
225224
226- private func dividerSpecifyLength( ) -> CGFloat {
227- dividerViews ( )
228- . map ( { $0. thickness } )
229- . reduce ( 0 , + )
230- }
231-
232225 private func fillDivider( ) {
233226 let maxHeight = effectiveSubviews. filter ( { ( $0 as? DividerView ) == nil } ) . map ( { $0. frame. size. height } ) . max ( ) ?? frame. height
234227 for divider in effectiveSubviews. compactMap ( { $0 as? DividerView } ) {
@@ -291,7 +284,7 @@ extension HStackView {
291284
292285 // 非 spacerView 的所有宽度
293286 let unspacerViewsMaxWidth = unspacerViewsWidth + unspacerViewsSpacing
294- let spacersWidth = ( frame . width - unspacerViewsMaxWidth - self . lengthOfAllFixedLengthSpacer ( ) )
287+ let spacersWidth = ( _stackContentWidth - unspacerViewsMaxWidth - self . lengthOfAllFixedLengthSpacer ( ) )
295288 let spacerWidth = spacersWidth / CGFloat( self . dynamicSpacerViews ( ) . count)
296289
297290 let spacerViews = self . spacerViews ( )
0 commit comments