我在项目里用到了一个UITableView,这个UITableView有3个cell。这里有个需求是对第一个cell进行刷新,刷新时会改变这个cell的高度。在改变第一个cell高度的同时,第2,3个cell会有移动,这个移动需要有动画效果。我用reloadRowsAtIndexPaths来实现这个需求,但是发现在动画进行的过程中,第3个cell会有重影。动画结束时,重影消失。
代码如下,这里用了beginUpdates, endUpdates:
[self beginUpdates];
[self reloadRowsAtIndexPaths ...]; // 这里只刷第一个cell
[self endUpdates];
通过debug发现,cellForRowAtIndexPath:会进2次。第1次是刷第一个cell,第2次是刷第3个cell。
这里就是动画重影的原因所在。我并没有用reloadRowsAtIndexPaths显式地刷第3个cell。
问题来了,系统是不是在reloadRowsAtIndexPaths的时候除了刷本身该刷的外,还会去刷其他一些并没有显式被刷的cell呢?还有我们应该怎么去解决这个重影问题?
把第一个cell不要写在cell里面, 写在tableView.tableHeaderView,如果高度变的渐变效果的话。 直接reloadData应该可以。