如果UILabel的高度取决于其文本,我应该如何以编程方式(以及使用哪种方法)配置该UILabel呢?我一直试图使用故事板和代码的组合来设置它,但无济于事.在设置lineBreakMode
和numberOfLines
时,每个人都推荐sizeToFit
.但是,无论我把代码放在viewDidLoad:
、viewDidAppear:
或viewDidLayoutSubviews
中,我都不能让它工作.要么我把框做得太小,不能容纳长文本,要么把它做得太大,不会缩小.
如果UILabel的高度取决于其文本,我应该如何以编程方式(以及使用哪种方法)配置该UILabel呢?我一直试图使用故事板和代码的组合来设置它,但无济于事.在设置lineBreakMode
和numberOfLines
时,每个人都推荐sizeToFit
.但是,无论我把代码放在viewDidLoad:
、viewDidAppear:
或viewDidLayoutSubviews
中,我都不能让它工作.要么我把框做得太小,不能容纳长文本,要么把它做得太大,不会缩小.
Please note在大多数情况下,Matt's solution的效果与预期相符.但如果这对你不起作用,请进一步阅读.
要使标签自动调整高度,需要执行以下操作:
例如:
self.descriptionLabel = [[UILabel alloc] init];
self.descriptionLabel.numberOfLines = 0;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.descriptionLabel.preferredMaxLayoutWidth = 200;
[self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self addSubview:self.descriptionLabel];
NSArray* constrs = [NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[descriptionLabel_]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)];
[self addConstraints:constrs];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[descriptionLabel_]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
[self.descriptionLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[descriptionLabel_(220@300)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
Using Interface Builder
设置四个约束条件.高度约束是强制性的.
然后转到标签的属性判断器并将行数设置为0.
Go to the label's size inspector and increase vertical ContentHuggingPriority and vertical ContentCompressionResistancePriority.
Select and edit height constraint.
And decrease height constraint priority.
Enjoy. :)个