Masonry自动布局label少一行'bug'

来源:互联网 发布:淘宝怎么看付款排名 编辑:程序博客网 时间:2024/05/16 17:10

一个字符串使用

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *,id> *)attributes context:(nullableNSStringDrawingContext *)context NS_AVAILABLE(10_11,7_0);

固定宽度来获取应该使用label的大小,获取完后,再把size赋给label,如果使用masonry的话有时候会少一行,通过打印最终的labelsize及通过boundingRectWithSize获取到的size对比,发现labelsize比获取到的要小一些,原来是masonry会做一个四舍五入(对于ip会以0.5,对于 plus会以0.33,对应的是真实的一个像素),但是当舍的时候会导致label恰好小一点,这样显示就会少一行了。


还有一种特殊情况,在7plus上正常,在6plus上本该入1,但是依然少一行,通过修改各个条件,发现是当使用

make.top.equalTo(self.lineBottom.mas_bottom);时本该入,但是却舍了,更根本的原因没有找到,可能和masonry的实现有关。


所以使用masonry比较保险的方法就是给高度加0.5或者1.



当然,如果masonry用的比较熟就不会遇到这个问题了,因为masonry会自动适应高度,不设置就是ok的。

0 0