我发现UITableViewHeaderFooterView重用性必须建立在至少有一组存在行数据的时候。而无关于执行
[self.tableView reloadData];
还是
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:headView.tag] withRowAnimation:UITableViewRowAnimationAutomatic];
有图为证:当图中这种情况滚动列表或者是展开关闭其他的组,都能够达到不创建新的headerView的效果。如图中就没有出现创建新的headerView的打印信息。
而如果是下图这种所有组都是关闭的(没有一行cell显示出来):滚动tableView或者打开关闭任意一组时就会控制台打印如下信息:如图可以看出headView没有达到重用的效果.
最后可得出结论:
UITableViewHeaderFooterView重用必须基于UITableView至少有一个cell显示出来。

解决方案 »

  1.   

    问题太长没有细看,但是我可以跟你分享一下我理解的UITableView的复用机制.
    举例cell,苹果封装了两个set集合,一个是正在使用中的set.一个是空闲的set.当要显示一个cell时,从空闲的set中取一个对象,如果没有,那么就创建一个新的 ,并且把新的对象放到正在使用的set中,当tableview reload的时候,会把正在使用中set的所有对象都移动到空闲set中,然后再显示.大概的复用流程是这样的.希望对你有所帮助.交流互动Q:2224080408