YYKit
YYKit copied to clipboard
YYLabel 在Autolayout下的一些问题。
YYLabel 在Autolayout下的一些问题。
与UILabel相比,貌似YYLabel在自动布局下面有缺陷。 测试的字符串里本身也包含换行符
我写在这里了,大神可以看下: UILabel与YYLabel的对比测试
YYLabel 需要设置一下 preferredMaxLayoutWidth,UILabel 在 iOS7 以上一般就不用设置这个值了。
preferredMaxLayoutWidth 这个值在UILabel中的作用感觉不是必须的,更多的辅助类的。一般实际开发中,这个值也是需要手动计算的,如果完全依靠这个值来确定,觉得不太符合Autolayout设计理念。 既然UILabel可以不依赖这个值,我觉得YYLabel也可以不依赖这个。回头仔细研究下。
iOS6 下,UILabel 是必须要设置这个值的。。在高版本上,AutoLayout 会尝试自动合成,但有时 UILabel 自动布局有问题时也需要手动设置这个值。
一般情况下,preferredMaxLayoutWidth 这个值应该与Label的宽度相等,也就是说,iOS7以后,如果约束符合条件,Label内部会默认处理preferredMaxLayoutWidth 等于Label的宽度。 可以这样理解吗?
autolayout 需要 label 提供一个 size,但这时内部为了计算 size,首先需要一个最大宽度来做限制。苹果的文档写着,内部这时候不应该访问自身的 frame 属性,因为这时候 frame 还有待 autolayout 来确定,所以这时候也不能直接用 label 的宽度。
至于 UILabel 做了什么改动这个就不清楚了,我觉得可能与 autolayout 有内部的配合流程。
@boyxu 测试过 UILabel
在 iOS 8 也需要设置 preferredMaxLayoutWidth
否则布局和计算高度都会有问题,以及,设置这个值必须在 -updateConstraint
和 -layoutSubviews
之前,否则也会有问题,iOS 9 上就不需要了,这个应该是 UILabel
在后面有调整了
@noark9 在iOS8.4的模拟器上测试了下,UILabel
依然是正确的,不需要设置preferredMaxLayoutWidth
,没有iOS8.4的模拟器和设备,所以iOS8.4之下的系统不确定是否正常。
@boyxu iOS8.4真机,不设置preferredMaxLayoutWidth,高度计算有误差,会导致label不折行!
@ibireme 大神,你好,我最近也在用yylabel, 我的系统iOS版本是11.2, 不设置preferredMaxLayoutWidth,依然无法换行,请问是不是我哪里用得不对? 请指导。
代码如下:
YYLabel *label = [[YYLabel alloc] init];
label.numberOfLines = 0;
label.text = @"sdfsldfljsflsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsfsdfsldfljsf";
[self.view addSubview:label];
[label mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.view).offset(100);
make.left.right.mas_equalTo(self.view);
}];
@luoshiyutim YYLabel 需要设置 preferredMaxLayoutWidth ,UILabel 不用