如何仅通过Storyboard让UIView适配UILabel的固有高度?
别担心,这个问题在IB里完全可以轻松搞定,我给你一步步拆解操作:
第一步:调整UILabel的优先级,让它"拒绝"被拉伸/压缩
选中你的UILabel,打开右侧的Size Inspector(尺子图标面板)。找到「Content Hugging Priority」(内容拥抱优先级),把垂直方向(Vertical)的数值调到比父UIView高——比如默认View的数值是250,你给Label设成251就行。同样,找到「Content Compression Resistance Priority」(内容抗压缩优先级),垂直方向的数值也调到比View高,比如View默认750,Label设751。这样Auto Layout就会优先保证Label的固有高度,而不是强制Label去适配View的尺寸。第二步:确保UIView没有固定高度约束
检查你的父UIView,一定要删掉所有固定高度约束!水平方向的约束(比如左对齐父视图、右对齐父视图,或者固定宽度)可以保留,这是为了确定View的宽度范围。第三步:确认UILabel的文本显示设置正确
如果你的Label是多行文本,务必把「Lines」属性设为0(在Attributes Inspector里),这样Label会自动根据内容换行并计算准确的高度。要是单行文本,Lines设1就好,但要保证Label的宽度足够容纳文本,或者设置了合适的换行模式。第四步:刷新布局验证效果
完成上面的设置后,点击IB顶部的「Resolve Auto Layout Issues」按钮(那个小箭头图标),选择「Update Frames」或者「Update Constraints for Selected Views」,你就能看到父UIView自动调整到刚好适配Label高度的状态了!
额外提醒:你之前给Label加的四边约束(左、上、右、下对齐父View)完全可以保留,它们的默认优先级是1000,会让Label填满View的内部空间,但因为我们调整了优先级逻辑,现在是View跟着Label的高度走,而不是反过来。
内容的提问来源于stack exchange,提问作者Sid Go

