Ios Word Wrap不适用于UILabel

Ios Word Wrap不适用于UILabel,ios,objective-c,uilabel,Ios,Objective C,Uilabel,使用autolayout,我无法在代码中覆盖标签。我在IB中设置了标签属性:Lines=0,LineBreaks=Word Wrap,但我将高度设置为一行,因为选择的单元格决定标签中的文本。所以有时候标签只有一行 在我的视图中: myLabel.text = @”blah, blah, blah….”; [myLabel setLineBreakMode:NSLineBreakByWordWrapping]; myLabel.numberOfLines = 0; //have tried 1

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

在我的视图中:

myLabel.text = @”blah, blah, blah….”;
[myLabel setLineBreakMode:NSLineBreakByWordWrapping];
myLabel.numberOfLines  = 0; //have tried 1 but didn’t help
[myLabel sizeToFit];
这适用于另一个项目,但我没有使用自动布局。自动布局似乎覆盖了这些设置。
我甚至还加了一句

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

但这没有帮助。

这是因为标签的属性只设置一次(在
viewdiload
中),而每次调用视图的布局子视图时,都会应用来自autolayout的约束

此外,根据苹果的文档,如果UILabel调整字体,使用换行模式包装文本将无法很好地与UILabel配合使用

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

不要忘记在这些调用中调用
[super-viewDidLayoutSubviews]
[super-layoutSubviews]


也就是说,如果您发现自己需要覆盖约束,可以在nib文件中设置所需的约束和属性,否则使用纯代码设置标签。

您需要将
preferredMaxLayoutWidth
设置为标签的最大宽度。您应该在
视图willlayoutsubviews
中执行此操作允许标签的固有大小确定高度。您需要将numberOfLines属性设置为0,这是正确的。因为您使用的是AutoLayout,所以不要调用sizeToFit,您需要设置标签的preferredMaxLayoutWidth。

我用[super viewWillLayoutSubviews]尝试过这一点;myLabel.preferredMaxLayoutWidth=280;除了SetLineBreakMode和numberOfLines之外,它仍然不换行。对于CollectionViewCell,我已经尝试过这个方法,但它不换行文本。我使用autolayout菜单在IB中设置约束。如果我能够在代码中调整标签的高度,然后,我下面的其他视图将被关闭。以编程方式更改字体的注释会把事情搞砸,这有助于我查找那些苹果文档,看看我是否能准确地理解正在发生的事情。标签的属性只需要设置一次,自动布局只会更改边界或边框和中心。