多行UILabel与内在大小相同的宽度UILabel

时间:2017-10-16 02:38:11

标签: ios autolayout ios-autolayout intrinsic-content-size

我尝试使用自动布局对齐两个UILabel,其中第一个标签没有设置宽度但是使用内在内容大小,第二个标签应该与第一个相同,将文本换行到新线。

理想情况下,第二个标签应将数字行设置为0以使用动态类型,但我暂时将其设置为2,甚至将其设置为特定高度。然而,当我尝试对齐equal widthstrailing时,内在内容大小标签会扩展到多行标签的宽度,就像它在一行上一样(参见下图)。

我之后的事情: The effect I'm after

我看到了什么: The effect I'm getting

有没有办法让我达到我想要的效果而不指定第一个标签的宽度?我希望扩展内容以考虑动态类型,并使第二个标签具有相同的宽度并将所有文本换行到新行。

2 个答案:

答案 0 :(得分:4)

您可以在不将任何内容挂钩到代码的情况下执行此操作。此解决方案的关键点是标签的内容拥抱优先级,其大小将完全基于内在内容大小计算。

内在内容大小标签

  • 将水平内容拥抱优先级设置为必需(1000)

多行标签(lorem ipsum标签)

  • 对齐内在内容大小标签
  • 将跟踪对齐内在内容大小标签


两个标签的Xcode配置(左:内在,右:多标签)

configuration of intrinsic content size label configuration of multiline label

答案 1 :(得分:0)

layoutSubviews中,将第二个标签的preferredMaxLayoutWidth设置为第一个标签内在宽度,类似于:

secondLabel.preferredmaxlayoutwidth = firstLabel.intrinsicContentSize.width