如何在Storyboard中修改含按钮的StackView宽高?解决尺寸固定问题
我之前也碰到过好几次这种StackView像被焊死一样改不了尺寸的情况,给你几个实用的排查方向,按顺序试大概率能解决:
先查有没有加固定宽高约束:打开Size Inspector,看看Width和Height栏是不是有固定数值(旁边带小锁图标)。如果有的话,要么直接删掉这些约束,要么把它们的优先级调低(比如改成250,低于你要添加的约束优先级),这样新约束就能覆盖它的固定尺寸设置了。
检查Content Hugging/Compression Resistance优先级:在Size Inspector往下翻,找到Content Hugging和Compression Resistance的设置项。如果StackView的Horizontal/Vertical Content Hugging Priority设得很高(比如1000),它会死死抱住内容不肯被拉伸;要是Compression Resistance优先级太高,也会拒绝被压缩。你可以把这两个优先级调低到750左右,让你加的约束有生效的机会。
看看StackView的Distribution和Alignment设置:选中StackView后在Attributes Inspector里,要是Distribution设成了Fill Equally或者Fill,可能会强制StackView填充空间或固定内容尺寸。试试改成Equal Spacing或者Equal Centering,Alignment换成Leading/Top这类非Fill的选项,有时候就能解开尺寸锁。
检查Intrinsic Content Size是否被锁定:在Size Inspector里找到Intrinsic Size选项,如果选的是Fixed,那StackView就会固定使用它的固有内容尺寸,不管你加什么约束都没用。把它改成Default,让StackView能根据内容和约束灵活调整尺寸。
最后排查父视图的约束:有时候问题根本不在StackView本身,而是父视图的约束限制了它。比如父视图是固定尺寸,或者给StackView加了固定位置+固定大小的约束,那StackView自然没法改。检查父视图的约束,确保给StackView留了可调整的空间(比如让它的Leading/Trailing/Top/Bottom都和父视图对齐,只给位置约束不给宽高)。
要是以上方法都不行,你可以试试删掉StackView重新拖一个——有时候IB的缓存会搞出这种莫名其妙的问题😂
内容的提问来源于stack exchange,提问作者S.S.D

