tableHeaderView自适应高度

场景一:创建HeaderView

创建HeaderView的时候需要指定它的高度。
但是autolayout中,HeaderView的高度往往会根据子控件浮动。而由于HeaderView还没加到TableView上,所以,HeaderView自身又无法加约束。
此时,我们需要把子控件的约束设置好,包括子控件对HeaderView的约束足以把HeaderView撑起来。
接下来使用以下代码,便可自动计算并设置HeaderView了。

CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

CGRect headerFrame = headerView.frame;
headerFrame.size.height = height;
headerView.frame = headerFrame;
self.tableView.tableHeaderView = headerView;

场景二:更新HeaderView

我们给UITableView添加一个HeaderView,之后想要修改Header大小的时候,会发现HeaderView的大小正确变化了。但是界面显示仍然不正确,HeaderView的显示区域没有变化。如图:

image

这时候搜索引擎得知,只修改HeaderView是没有用的,需要重新设置HeaderView。像这样:

CGRect frame = headerView.frame;
frame.size.height = nNeedsHeight;
headerView.frame = frame;

tableView.tableHeaderView = headerView;

可是,我们之所以用autolayout,就是因为不想算高度呀。都知道高度了解决方法就太多了。
那么不知道高度的情况下怎么办呢?
其实只需要以下设置就可以了。

[self.tableView.tableHeaderView layoutIfNeeded]; 
self.tableView.tableHeaderView = self.headerView;

以上内容原文地址

注意:不管何种方式,约束必须要能把headerView撑开。
经测试
[self.tableView.tableHeaderView layoutIfNeeded]
可以让headerView正常显示,但是只刷新了headerView, 如果有cell,cell将被变高的headerView盖住。
[self.tableView layoutIfNeeded];
解决问题

你可能感兴趣的:(tableHeaderView自适应高度)