@@ -161,9 +161,11 @@ -(CGSize)calcLayoutSize:(CGSize)size isEstimate:(BOOL)isEstimate pHasSubLayout:(
161161
162162 if (sbvsc.widthSizeInner .dimeWrapVal )
163163 {
164- if (lsc.pagedCount > 0 ||
165- (orientation == MyOrientation_Horz && (arrangedGravity & MyGravity_Vert_Mask) == MyGravity_Horz_Fill) ||
166- (orientation == MyOrientation_Vert && ((gravity & MyGravity_Vert_Mask) == MyGravity_Horz_Fill || sbvsc.weight != 0 )))
164+ if (lsc.pagedCount > 0 ||
165+ (orientation == MyOrientation_Vert && sbvsc.weight != 0.0 ) ||
166+ (arrangedGravity & MyGravity_Vert_Mask) == MyGravity_Horz_Fill ||
167+ (arrangedGravity & MyGravity_Vert_Mask) == MyGravity_Horz_Stretch ||
168+ (gravity & MyGravity_Vert_Mask) == MyGravity_Horz_Fill )
167169 {
168170 if ([sbvsc.view isKindOfClass: [MyBaseLayout class ]])
169171 [sbvsc.widthSizeInner __setActive: NO ];
@@ -173,8 +175,10 @@ -(CGSize)calcLayoutSize:(CGSize)size isEstimate:(BOOL)isEstimate pHasSubLayout:(
173175 if (sbvsc.heightSizeInner .dimeWrapVal )
174176 {
175177 if (lsc.pagedCount > 0 ||
176- (orientation == MyOrientation_Vert && (arrangedGravity & MyGravity_Horz_Mask) == MyGravity_Vert_Fill) ||
177- (orientation == MyOrientation_Horz && ((gravity & MyGravity_Horz_Mask) == MyGravity_Vert_Fill || sbvsc.weight != 0 )))
178+ (orientation == MyOrientation_Horz && sbvsc.weight != 0.0 ) ||
179+ (arrangedGravity & MyGravity_Horz_Mask) == MyGravity_Vert_Fill ||
180+ (arrangedGravity & MyGravity_Horz_Mask) == MyGravity_Vert_Stretch ||
181+ (gravity & MyGravity_Horz_Mask) == MyGravity_Vert_Fill)
178182 {
179183 if ([sbvsc.view isKindOfClass: [MyBaseLayout class ]])
180184 [sbvsc.heightSizeInner __setActive: NO ];
@@ -1317,7 +1321,7 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForVertOrientationCont
13171321 {
13181322 MyViewSizeClass *sbvsc = (MyViewSizeClass*)[sbv myCurrentSizeClassFrom: sbvmyFrame];
13191323 // 只有在没有约束,或者非布局视图下的高度自适应约束才会被拉伸。
1320- if (sbvsc.heightSizeInner .dimeVal == nil || (sbvsc. heightSizeInner . dimeWrapVal && ![sbv isKindOfClass: [MyBaseLayout class ]]) )
1324+ if (sbvsc.heightSizeInner .dimeVal == nil )
13211325 {
13221326 sbvmyFrame.height += fill;
13231327 }
@@ -1865,7 +1869,7 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForVertOrientation:(CG
18651869 if (vertGravity == MyGravity_Vert_Stretch)
18661870 {
18671871 MyViewSizeClass *sbvsc = (MyViewSizeClass*)[sbv myCurrentSizeClassFrom: sbvmyFrame];
1868- if (sbvsc.heightSizeInner .dimeVal == nil || (sbvsc. heightSizeInner . dimeWrapVal && ![sbv isKindOfClass: [MyBaseLayout class ]]) )
1872+ if (sbvsc.heightSizeInner .dimeVal == nil )
18691873 {
18701874 sbvmyFrame.height += fill;
18711875 }
@@ -2000,13 +2004,27 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForHorzOrientationCont
20002004 MyViewSizeClass *sbvsc = (MyViewSizeClass*)[sbv myCurrentSizeClassFrom: sbvmyFrame];
20012005
20022006 CGFloat topSpace = sbvsc.topPosInner .absVal ;
2007+ CGFloat leadingSpace = sbvsc.leadingPosInner .absVal ;
20032008 CGFloat bottomSpace = sbvsc.bottomPosInner .absVal ;
2009+ CGFloat trailingSpace = sbvsc.trailingPosInner .absVal ;
20042010 CGRect rect = sbvmyFrame.frame ;
20052011
20062012 // 这里先计算一下宽度,因为有可能有宽度固定,高度自适应的情况。
20072013 if (sbvsc.widthSizeInner .dimeVal != nil )
20082014 {
20092015 rect.size .width = [self myLayout: lsc widthSizeValueOfSubview: sbvsc selfSize: selfSize sbvSize: rect.size paddingTop: paddingTop paddingLeading: paddingLeading paddingBottom: paddingBottom paddingTrailing: paddingTrailing];
2016+
2017+ // 当只有一行而且是flex标准并且是stretch时会把所有子视图的宽度都强制拉伸为布局视图的宽度
2018+ // 所以如果这里是宽度自适应时需要将宽度强制设置为和布局等宽,以便解决同时高度自适应时高度计算不正确的问题。
2019+ if (lineIndex == 0 &&
2020+ sbvsc.widthSizeInner .dimeWrapVal &&
2021+ lsc.isFlex &&
2022+ horzGravity == MyGravity_Horz_Stretch &&
2023+ rect.size .width > selfSize.width - paddingHorz - leadingSpace - trailingSpace)
2024+ {
2025+ rect.size .width = selfSize.width - paddingHorz - leadingSpace - trailingSpace;
2026+ }
2027+
20102028 rect.size .width = [self myValidMeasure: sbvsc.widthSizeInner sbv: sbv calcSize: rect.size.width sbvSize: rect.size selfLayoutSize: selfSize];
20112029 }
20122030 else if (horzGravity == MyGravity_Horz_Fill || horzGravity == MyGravity_Horz_Stretch)
@@ -2263,7 +2281,7 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForHorzOrientationCont
22632281 if (horzGravity == MyGravity_Horz_Stretch)
22642282 {
22652283 MyViewSizeClass *sbvsc = (MyViewSizeClass*)[sbv myCurrentSizeClassFrom: sbvmyFrame];
2266- if (sbvsc.widthSizeInner .dimeVal == nil || (sbvsc. widthSizeInner . dimeWrapVal && ![sbv isKindOfClass: [MyBaseLayout class ]]) )
2284+ if (sbvsc.widthSizeInner .dimeVal == nil )
22672285 {
22682286 sbvmyFrame.width += fill;
22692287 }
@@ -2441,6 +2459,17 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForHorzOrientation:(CG
24412459 else if (sbvsc.widthSizeInner .dimeVal != nil )
24422460 {
24432461 rect.size .width = [self myLayout: lsc widthSizeValueOfSubview: sbvsc selfSize: selfSize sbvSize: rect.size paddingTop: paddingTop paddingLeading: paddingLeading paddingBottom: paddingBottom paddingTrailing: paddingTrailing];
2462+
2463+ // 当只有一行而且是flex标准并且是stretch时会把所有子视图的宽度都强制拉伸为布局视图的宽度
2464+ // 所以如果这里是宽度自适应时需要将宽度强制设置为和布局等宽,以便解决同时高度自适应时高度计算不正确的问题。
2465+ if (arranges == 1 &&
2466+ sbvsc.widthSizeInner .dimeWrapVal &&
2467+ lsc.isFlex &&
2468+ horzGravity == MyGravity_Horz_Stretch &&
2469+ rect.size .width > selfSize.width - paddingHorz - leadingSpace - trailingSpace)
2470+ {
2471+ rect.size .width = selfSize.width - paddingHorz - leadingSpace - trailingSpace;
2472+ }
24442473 }
24452474 else if (horzGravity == MyGravity_Horz_Fill || horzGravity == MyGravity_Horz_Stretch)
24462475 {
@@ -2726,7 +2755,7 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForHorzOrientation:(CG
27262755
27272756 selfSize.width = [self myValidMeasure: lsc.widthSizeInner sbv: self calcSize: selfSize.width sbvSize: selfSize selfLayoutSize: self .superview.bounds.size];
27282757 }
2729- // 根据flex规则:如果只有一行则整个高度都作为子视图的拉伸和停靠区域 。
2758+ // 根据flex规则:如果只有一行则整个宽度都作为子视图的拉伸和停靠区域 。
27302759 if (lsc.isFlex && arranges == 1 )
27312760 lineMaxWidth = selfSize.width - paddingHorz;
27322761
@@ -2784,7 +2813,7 @@ -(CGSize)myLayout:(MyFlowLayoutViewSizeClass*)lsc calcSizeForHorzOrientation:(CG
27842813 if (horzGravity == MyGravity_Horz_Stretch)
27852814 {
27862815 MyViewSizeClass *sbvsc = (MyViewSizeClass*)[sbv myCurrentSizeClassFrom: sbvmyFrame];
2787- if (sbvsc.widthSizeInner .dimeVal == nil || (sbvsc. widthSizeInner . dimeWrapVal && ![sbv isKindOfClass: [MyBaseLayout class ]]) )
2816+ if (sbvsc.widthSizeInner .dimeVal == nil )
27882817 {
27892818 sbvmyFrame.width += fill;
27902819 }
0 commit comments