最近在 iOS 8 系统遇到了一个很奇怪的问题,处于 UITableViewCell 中的 UILabel ,即使设置好了 UILabel 的 left
、right
属性,依然无法实现 UILabel 的自动折行,导致在末尾出现省略号。
这种情况可以尝试设置 preferredMaxLayoutWidth
。
Apple 官方文档中这样解释它
This property affects the size of the label when layout constraints are applied to it. During layout, if the text extends beyond the width specified by this property, the additional text flows to one or more new lines, increasing the height of the label.
也就是说,设置这个属性可以认为是给 UILabel 添加了一个 width
约束,使它可以在宽度达到最大值时自动折行。我理解为以下两种写法的效果是等价的。
// 1
label.preferredMaxLayoutWidth = 100.f;
// 2
[label mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.lessThanOrEqualTo(@100);
}];
复制代码
使用这种写法解决了在 iOS 8 上 UILabel 不自动折行的问题。至于原理,还不不太清楚,只是记录一下。