使用自动布局我无法在代码中覆盖我的标签。我在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);
但它没有帮助。
答案 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
。