Word Wrap不适用于UILabel

时间:2014-08-05 15:33:31

标签: ios objective-c uilabel

使用自动布局我无法在代码中覆盖我的标签。我在IB中设置了标签属性:Lines = 0,LineBreaks = Word Wrap,但我将我的高度设置为单行,因为选择了哪个单元格确定标签中的文本。所以有时标签只有一行。

在我的viewDidLoad中:

myLabel.text = @”blah, blah, blah….”;
[myLabel setLineBreakMode:NSLineBreakByWordWrapping];
myLabel.numberOfLines  = 0; //have tried 1 but didn’t help
[myLabel sizeToFit];

这适用于另一个项目,但我没有使用AutoLayout。 AutoLayout似乎覆盖了这些设置 我甚至添加了

[myLabel setFrame:CGRectMake(20, 135, 280, 80); 

但它没有帮助。

3 个答案:

答案 0 :(得分:6)

允许标签的内在大小确定高度。你是正确的,你需要将numberOfLines属性设置为0.因为你使用AutoLayout,不要调用sizeToFit,你需要设置标签的preferredMaxLayoutWidth。

答案 1 :(得分:4)

这是因为您的标签属性只设置了一次(viewDidLoad),而每次调用视图的layoutSubviews时都会应用自动布局的约束。

此外,根据Apple的文档,如果正在调整字体,使用包装文本的换行模式将无法与您的UILabel一起使用。

如果这是UIViewController,请将UILabel覆盖代码移至- (void)viewDidLayoutSubviews,或者如果是在UIView中,请将代码移至- (void)layoutSubviews

请勿忘记在这些来电中致电[super viewDidLayoutSubviews][super layoutSubviews]

话虽如此,如果您认为自己需要覆盖约束,请在nib文件中设置约束和属性,否则使用纯代码设置标签。

答案 2 :(得分:4)

您需要将preferredMaxLayoutWidth设置为标签的最大宽度。您应该在viewWillLayoutSubviews

中执行此操作