以前做自定义headerView适应高度都是用系统api算的高度,代码如下
let size = tableHeaderView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
tableHeaderView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: size)
listView.tableHeaderView = tableHeaderView
偶然发现还有更简单的方法, 只需要在设置tableHeaderView后设置自定义headerView的宽度的约束,就能够实现自适应高度了
listView.tableHeaderView = headerView
系统约束
headerView.translatesAutoresizingMaskIntoConstraints = false
headerView.widthAnchor.constraint(equalTo: listView.widthAnchor).isActive = true
使用Snapkit
headerView.snp.makeConstraints { make in
make.width.equalTo(listView)
}
千万注意使用约束时的顺序,下面必不可少,否则如果section先有数据,会造成显示了header后,listView的contentSize不对,导致无法滑动
listView.tableHeaderView = tableHeader
tableHeader.snp.remakeConstraints { make **in******
make.width.equalTo(listView)
}
self.view.layoutIfNeeded()
listView.tableHeaderView = tableHeader
注意tableFooterView 使用自适应方法无用