合理的设计都千篇一律,奇葩的需求各有各的不同。
使用UITableView
自动计算cell高度,相对手动计算,无疑方便了太多了。
手动计算高度的麻烦没有了,一行代码解决问题。
self.tableView.estimatedRowHeight = UITableView.automaticDimension
然鹅……就像权利和义务永远对等一样,适配的问题又来了。
按照苹果偏好行业惯例,一般来说,向下适配3个大版本,当前版本为iOS13,则最低适配到iOS10,再往前连模拟器都找不到了。
坑位一
神奇的UITableView.automaticDimension
在iOS10及之前的系统版本,直接使用上述代码,自动计算并不会生效。
而使用UITableViewDelegate
方法,则自动计算生效。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
坑位二
UIView-Encapsulated-Layout-Height
约束冲突
约束冲突
此时,debugPrint(UITableView.automaticDimension)
打印输出为-1。
将UITableView.automaticDimension
改为固定值,如UIScreen.main.bounds.size.height
,冲突消失。
注:并非所有约束冲突都是此问题导致,请仔细检查代码。