本文以UITableView 使用SnapKit 来设置约束为例:
1. 列表页设置高度自适应、预估行高
// 自动计算行高
tableView.rowHeight = UITableView.automaticDimension
// 设置预估行高, 必须要写, 否则打印垃圾log日志, 提示约束冲突
tableView.estimatedRowHeight = 400
2. cell 中的操作
一般情况下只根据字体的多少, 自动换行后计算承载文字的控件底部约束与contentView 进行约束更新即可.
这里说另一种情况, 根据数据的不同, cell会显示不同数量的子控件, 也就是说, 子控件或者子控件和contentView 的相对约束发生改变时要做的处理.
布局时当前后约束参照物发生改变时, 一般都选择记录约束 -> 卸载约束 -> 重新设置约束来约束布局; 而当参照物未发生改变(也就是上面说的一把情况)的时候, 只需要更新约束即可.
示例图片
image.png
2.1 声明需要记录的约束
// MARK: 记录底部视图的 顶部约束 (需要引入import SnapKit)
var bottomViewTopConstraint: Constraint?
2.2 记录约束
// MARK: cell 自适应高度, 需要与底部视图做约束(具体⬇️)
contentView.addSubview(bottomView)
bottomView.snp_makeConstraints { (make) in
make.left.right.equalTo(contentView)
// MARK: 记录底部视图的 顶部约束的