多行 UILabel 与内部内容大小相同的 UILabel

Multiline UILabel same width as intrinsic content sized UILabel

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

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

我追求的是:

我所看到的:

有什么方法可以让我在不指定第一个标签宽度的情况下实现我想要的效果吗?我希望它随内容扩展以考虑动态类型,并使第二个标签具有相同的宽度并将所有文本换行。

在第二个标签的 layoutSubviews, set preferredMaxLayoutWidth 到第一个标签的固有宽度中,类似于:

secondLabel.preferredmaxlayoutwidth = firstLabel.intrinsicContentSize.width

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

内在内容大小标签

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

多行标签(lorem ipsum 标签)

  • 对齐前导到内部内容大小标签
  • 将尾部对齐到内部内容大小标签


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