UITableView使用reloadRowsAtIndexPaths导致动画有重影,怎么解决?

我在项目里用到了一个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呢?还有我们应该怎么去解决这个重影问题?

阅读 3.8k
1 个回答

把第一个cell不要写在cell里面, 写在tableView.tableHeaderView,如果高度变的渐变效果的话。 直接reloadData应该可以。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题