用约束设置UITableView的tableHeaderView,是个常见需求。步骤如下:
1,自定义视图,作为UITableView的tableHeaderView。视图的布局用约束实现。另外要实现UIView基类的两个函数:
函数1:计算视图的大小。当用户调用视图的SizeToFit方法时会调用该方法计算大小。
override func sizeThatFits(_ size: CGSize) -> CGSize {
let contentSize = self.intrinsicContentSize
return CGSize(width: size.width, height: contentSize.height)
}
函数2:视图的内在大小。为sizeThatFits提供实际的宽、高。
override var intrinsicContentSize: CGSize {
var height: CGFloat
height = MyJourneyHeaderView.kMapViewHeight + kMapBtnHeight + kVerticalPadding + MyJourneyHeaderView.tableViewHeight + kVerticalPadding + (self.showAdView ? MyJourneyHeaderView.kAdViewHeight : 0)
return CGSize(width: CGFloat(UIViewNoIntrinsicMetric), height: height)
}
2,创建自定义视图的对象后,设置其frame。
self.tableHeaderView.frame = CGRect(x: 0, y: 0, width: kScreenWidth,
height: self.tableHeaderView.intrinsicContentSize.height)
3,设置头部视图
self.tableView.tableHeaderView = self.tableHeaderView
4,头部视图数据变化后更新
self.tableHeaderView.sizeToFit()
self.tableHeaderView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: self.tableHeaderView.intrinsicContentSize.height)
self.tableView.tableHeaderView = self.tableHeaderView