使用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里有关于这个问题的讨论。