小编前段时间接到需求需要实现一个类似于QQ好友列表展开关闭的表视图,实现后debug模式测试发现在滚动列表的时候以及收到通知刷新表视图数据的时候一直在新建headerView,并没有达到重用的效果。
小编在排查各种原因无果后,差点都要放弃了。。。今天一个偶然的机会,我把之前练手的项目QQ好友列表打开开始调试。打开其中一个分组之后,再次滚动表视图则不会再新建headerView了。如下图所示:
控制台打印结果表示没有再新建headerView。这个发现让小编兴奋不已🥰。然后,针对这种业务场景下该怎么处理全都没有展开的情况下headerView重用问题?小编如果有解决方案会后续更新到文中来
后续更新
小编今天发现tableView重用机制和表视图高度有莫大的关系,如果是自定义的UITableViewCell,那么cell的高度必须满足下面两个条件之一:
- 高度固定,那rowHeight应确定为具体数值。
- 自适应高度的情况下约束设置好的前提下,rowHeight需设置为UITableViewAutomaticDimension,estimateRowHeight需设置为一个具体数值,但是必须小于rowHeight。比如说点击展开关闭的cell,关闭的时候是44高度。那么estimateRowHeight应设置为小于等于44。如果是无法确定高度的cell,estimateRowHeight建议设置为1。
根据以上条件设置好了以后,无论是滚动,还是刷新tableView。都不会无止境的创建UITableViewCell了。😁
如果是自定义的UITableHeaderFooterView的话,首先这个view可重用的前提是自身满足上面的两个条件之一。然后还有一点很重要的是这个view所在tableview的cell也必须要满足上面的两个条件之一。如此才能实现滚动亦或者是刷新tableView都能重用该view。
疑惑🤔
最后说回到上面QQ好友列表的例子,点击分组展开/关闭时依然会创建新的headerView,这个小编还得研究一下啊