有这么一种需求,在列表顶端显示一些别样的数据,而这个别样的数据则须要经过一个别样的 View 来展示,它即是 UITableView 的 tableHeaderView。web
假若 tableHeaderView 里的内容很固定,高度不要随着内容的不一样而改变,这样还好。动画
若是,高度是须要动态改变的,某些人(好比我)可能就会遇到这样一个难题:spa
已经给 view 中的每一个子 view 设置过值了,高度算过了,frame 也从新设置过了,可 tableHeaderView 的高度却仍是以前的高度,没有变化。内容变多,则会有一部分看不见了;内容变少,则有一部分空白,放在那里实在很差看。code
怎么办??blog
view 做为 tableView 的 tableHeaderView,单纯的改变 view 的 frame 是无济于事的,tableView 不会大度到时刻适应它的高度(之后 Apple 会不会改变就不知道了),因此,如何告诉tableView 它的 tableHeaderView 已经改变了?很简单,就一句话(关键最后一句):table
//提早得到约束后的headBgView的bounds
[self.headBgView setNeedsLayout];
[self.headBgView layoutIfNeeded];
CGRect newFrame = headerView.frame; newFrame.size.height = newFrame.size.height + webView.frame.size.height; headerView.frame = newFrame; [self.tableView setTableHeaderView:headerView];
这样之后,效果就出来了。不过这种过分显得有些生硬,能不能加一点点动画,让它变得顺眼一些呢?试试下面的代码:class
[self.tableView beginUpdates];
[self.tableView setTableHeaderView:headerView];
[self.tableView endUpdates];