以autolayout
为例:(autosizing
道理一样)
场景一:创建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
的显示区域没有变化。如图:
这时候搜索引擎得知,只修改
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;