4

首先,我创建我的新标签:

UILabel *newLabel=[[UILabel alloc] init];
newLabel.font=[UIFont preferredFontForTextStyle:@"Body"];
newLabel.translatesAutoresizingMaskIntoConstraints=NO;
newLabel.numberOfLines=0;
newLabel.lineBreakMode=NSLineBreakByWordWrapping;
newLabel.text=[NSString stringWithFormat:@"This line is this: %@%@%@",resultString,resultString,resultString];

然后,我创建了各种约束:

NSArray *labelConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[label]"
                                                                      options:0
                                                                      metrics:nil
                                                                      views:@{@"label": newLabel}];
//Merge the above constraint into a tracking array
labelConstraints=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[label]|"
                                                             options:0
                                                             metrics:nil
                                                               views:@{@"label": newLabel}];
//Again, move the constraint into a tracking array

//Later, we apply all constraints in the tracking array to self.

不幸的是,标签的表现不如预期。假设我正确阅读了上述约束,我的标签应该从包含视图的一个边缘水平移动到另一个边缘,而不是垂直绑定到任何给定高度。这应该与我设置的 numberOfLines=0 和 lineBreakMode=NSLineBreakByWordWrapping 相结合,使单元格水平拉伸以获取所有必要的行。相反,这条线将自己延伸到包含视图的边缘之外,以将所有内容都放在一条线上——我不知道为什么!

如果重要的话,[self] 是 UITableViewCell 的子类,我正在尝试对其进行编程以随内容大小动态缩放。如果我可以让单元格的内容正确布局,那么计算单元格的实际大小应该相对容易!

4

2 回答 2

5

您可能需要设置preferredMaxLayoutWidth

看到这个类似的问题:

iOS Autolayout:调整大小父视图中的 UILabels 问题

于 2013-09-16T22:18:16.300 回答
4

不幸的是,将 a 设置UILabel为零numberOfLines并不能很好地与“开箱即用”的自动布局配合使用。您还需要设置标签的preferredMaxLayoutWidth属性。

于 2013-09-16T22:18:30.197 回答