FDTemplateLayoutCell在iOS10.3模拟器上高度计算不准

使用UITableView-FDTemplateLayoutCell来自动计算tableView中cell的高度十分方便,然而苹果更新了10.3系统后,如果使用xib自定义cell的方式,它就不准了,控制台会输出警告信息……

log警告


[LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x608000295a40 UITableViewCellContentView:0x7f8b45c05cb0.width == 414   (active)>",
    "<NSLayoutConstraint:0x60800028fc80 'UIView-Encapsulated-Layout-Width' UITableViewCellContentView:0x7f8b45c05cb0.width == 0   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x608000295a40 UITableViewCellContentView:0x7f8b45c05cb0.width == 414   (active)>```

**原因**
***
iOS 10.3 以后,如果调用系统的 systemLayoutSizeFittingSize 方法,系统会自动给 contentView 加 width height 两个约束,这两个约束的值跟 xib 的 view size 一样。
这就导致了自定义 cell 中一个可变高度 label 的宽度约束依赖 contentView 的宽度时,而 contentView 有个错误的宽度约束,导致计算错误。

**解决办法**
***
在自定义cell的awakeFromNib方法中添加:

self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;```

UITableView-FDTemplateLayoutCell的issues里有关于这个问题的讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容