IOS / Autolayout:让UILabel使用Autolayout转到多行

时间:2018-03-22 12:09:01

标签: ios autolayout uilabel

如果文字需要自动布局,我需要UILabel转到多行。在代码和故事板中,我已将numberOfLines设置为0并进行自动换行,我也称为sizeToFit

如果我将标签的高度约束设置为足够大的值(例如200),则会在多行显示全部文本。但是对于短文本,它不会收缩,留下大量空白区域。但是如果我将高度约束设置为较低的值,例如> = 21,那么它只显示一行并切断其他所有内容。

视图层次结构是View-Scrollview-Contentview-elements我为最低元素设置了一个底部常量,优先级为250,因此应该进行调整。 Autolayout显示没有错误

然而,没有什么能够为标签创建一个巨大的高度限制,让标签扩展到多行。

非常感谢有关如何解决此问题的任何建议。

在viewwillappear中:

_myLabel.lineBreakMode = UILineBreakModeWordWrap;//deprecated but I threw it in too
_myLabel.lineBreakMode = NSLineBreakByWordWrapping;
_myLabel.numberOfLines = 0;
[_myLabel sizeToFit];

// height constraint for label

height>=21//text does not extend more than one line
height=200//text does extend more than one line but leaves lots of whitespace if text is short ie it does not shrink.

4 个答案:

答案 0 :(得分:0)

来自故事板的

  • 设置属性

    _myLabel.numberOfLines = 0;
    
  • 设置约束

    _myLabel.height <= 200
    

注意:标签高度将根据其文字内容自动设置。从约束关系标签高度最多200,至少高度是其文本内容(自动调整)。

现在还有任何疑问,然后问。

答案 1 :(得分:0)

使用Autolayout调用sizeToFit不会产生任何影响。

您应该将标签的垂直内容压缩阻力优先级设置为必需。此优先级禁止Autolayout根据需要为标签提供较小的高度以显示所有行:

[_myLabel setContentCompressionResistancePriority:1000 
     forAxis:UILayoutConstraintAxisVertical];

您也可以在界面构建器的大小检查器中应用此优先级。

答案 2 :(得分:0)

您应该为标签的高度添加2个约束:

  1. 约束高度&lt; = 200优先级1000
  2. 约束高度&gt; = 21优先级1000

答案 3 :(得分:0)

为您的标签和故事板集leading, trailing, top, bottom提供适当的numberOfLines = 2限制。我指定约束的原因是auto-layout will then automatically resize the intrinsic size of the label基于内容。希望,这很有帮助。