环境:
Xcode12,Swift5,iOS13
tableHeaderView是table view 的头部视图,设置tableHeaderView
tableView.tableHeaderView = SomeView()
当把一个UIView的子类设置为tableHeaderView时,我们只需要计算view的高度就可以了,宽度会自适应为ttable view的宽度。高度可以用frame一个一个计算,也可以让view根据内容的约束自动计算。
使用Auto Layout计算someView的高度,首先要保证约束正确,然后重新计算someView的高度:
// view controlle 的方法
override func viewDidLayoutSubviews() {
if let headerView = tableView.tableHeaderView {
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
tableView.tableHeaderView = headerView
//如果高度没有改变,调用
//tableView.layoutIfNeeded()
}
}
这里有一个特别要注意的点
如果
someView里面有view设置了宽高比,此时使用systemLayoutSizeFitting高度计算的高度就会不对。