tableHeaderView自适应高度

2,921 阅读1分钟

环境:Xcode12,Swift5, iOS13

tableHeaderViewtable 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高度计算的高度就会不对。