如何用约束设置UITableView的tableHeaderView,其中tableHeaderView的高度是动态变化的

用约束设置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

你可能感兴趣的:(iOS)