iOS动态设置tableHeaderView高度

需求

动态的设置tableHeaderView的高度

遇到的问题:

  • 设置tableHeaderViewframe无法实现,有时候会出现tableView 中间的 cell 不显示
  • 有时候会导致headerViewcell内容重叠

  • 通过计算控件高度设置frame方式麻烦

正确的步骤

  • 创建HeaderView
  • 取出UITableViewtableHeaderView
  • 设置frame大小,调整headerView布局
  • 重新给UITableViewtableHeaderView

使用AutoLayout

UITableView增加分类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extension UITableView {
/// set tableHeaderView
func setTableHeaderView(_ headerView: UIView) {
headerView.translatesAutoresizingMaskIntoConstraints = false
self.tableHeaderView = headerView
// autolayout
NSLayoutConstraint(item: headerView, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: headerView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: headerView, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 1.0, constant: 0).isActive = true
}
/// update
func updateHeaderView() {
guard let headerView = self.tableHeaderView else { return }
headerView.layoutIfNeeded()
let header = self.tableHeaderView
self.tableHeaderView = header
}
}