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

问题描述:

我试图对齐两个UILabel使用自动布局,其中第一个标签没有设置宽度但使用内在内容大小,第二个应该是与第一个相同的宽度,包装文字换行。多行UILabel与内容大小相同的宽度UILabel

理想情况下,第二个标签应该将数字行设置为0以与动态类型配合使用,但我暂时将其设置为2,即使给定了特定高度。然而,当我尝试对齐equal widthstrailing时,内在内容大小标签展开为多行标签的宽度,就好像它全部位于同一行上一样(请参见下图)。

什么我后: The effect I'm after

我所看到的: The effect I'm getting

有什么办法让我达到我想要的,而不指定宽度第一个标签?我希望它的内容能够扩展为动态类型,第二个标签具有相同的宽度,并将所有文本换行为新行。

+0

你能否提供更多信息关于第一个标签,如最多可能包含多少个单词?其内容是否可以超过1行?它会总是有一些文字,也可能是空的? – Adeel

+0

这可能看起来像一个愚蠢的问题,但你设置第一个标签等于第二个的宽度,反之亦然? – Jonathan

+0

@Adeel第一个标签只包含三个单词,但我希望它是动态的原因是我想添加动态类型并将其本地化为可能会改变它的多种语言。它永远不会超过1行,并且不能为空。 – Aleksander

你可以不用任何挂钩的代码。此解决方案的关键点在于内容拥有优先级,该标签的大小将完全根据内在内容大小进行计算。

本质内容大小标签

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

多行标签(Lorem存有标签)

  • 对齐领先到固有内容大小标签
  • 对齐尾随固有内容尺寸标签


Xcode中配置了两个标签(左:本质,右:多标记)

configuration of intrinsic content size label configuration of multiline label

+0

谢谢!我知道内容拥抱/压缩数字可能与它有关,但他们一直困惑着我,我无法尝试自我解决问题。这是一种魅力! – Aleksander

layoutSubviews,设置第二个标签的preferredMaxLayoutWidth到第一个标签固有宽度,这样的事情:

secondLabel.preferredmaxlayoutwidth = firstLabel.intrinsicContentSize.width 
+0

有什么方法可以在故事板中实现此目的/我应该如何在故事板中进行操作,以便它不会抱怨不可满足的约束条件? – Aleksander

+0

为什么你的故事板抱怨不可满足的限制?请张贴错误的截图。 –

+0

抱歉,缺少更好的单词。我只是不知道该怎么设置。如果我不给它第二个标签的任何宽度约束,它会溢出屏幕(如上面的插图#2)。我更喜欢故事板能够准确地表示它实际呈现的内容。我可以在故事板中设置任何约束来实现此目的,并帮助保持布局代码远离我的VC? – Aleksander