3 回答
TA贡献1829条经验 获得超13个赞
在大多数情况下,Matt的解决方案按预期工作。但如果它不适合你,请进一步阅读。
要使标签自动调整高度,您需要执行以下操作:
设置标签的布局约束
设置低优先级的高度约束。它应该低于ContentCompressionResistancePriority
设置numberOfLines = 0
将ContentHuggingPriority设置为高于label的高度优先级
为label选择preferredMaxLayoutWidth。标签使用该值来计算其高度
例如:
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_)]];
使用Interface Builder
设置四个约束。高度约束是强制性的。
然后转到标签的属性检查器并将行数设置为0。
转到标签的大小检查器并增加垂直ContentHuggingPriority和垂直ContentCompressionResistancePriority。
选择并编辑高度约束。
并降低高度约束优先级。
请享用。:)
TA贡献1828条经验 获得超13个赞
在iOS 6中,使用自动布局,如果UILabel的边(或宽度)和顶部被固定,它将自动垂直增长和缩小以适合其内容,完全没有代码,也没有解除其抗压性等问题。这很简单。
在更复杂的情况下,只需设置标签即可preferredMaxLayoutWidth
。
无论哪种方式,正确的事情都会自动发生。
TA贡献1865条经验 获得超7个赞
在IOS7中注意到sizeToFit也不起作用 - 也许解决方案也可能对你有所帮助
[textView sizeToFit];[textView layoutIfNeeded];
- 3 回答
- 0 关注
- 855 浏览
添加回答
举报