我的UITableView
在iPad的视口中包含大约20行。我有一个间隔计时器,会定期调用UITableView's
reloadData
(将其发布到UI线程)。
现在,当我以中速(不是那么快)滚动UITableView
时,UITableView
会刷新闪烁效果。
我必须通过循环遍历数组中的所有项目来编写一个手动更新UITableViewCell
标签的函数(此数组保留UITableView
上显示的所有项目)。我将在计时器运行时执行此函数,而不是调用reloadData
(如上所述)。然后闪烁的问题就消失了。
我相信reloadData应该比循环遍历所有数据更好,因为reloadData只会刷新当前显示的Cell而不是所有行,但我无法弄清楚闪烁发生的原因。谁知道为什么?
我必须提到的一件事是我确实正确地使用CellIdentifier
来重用单元格,并且只在检索到的单元格为空时创建单元格。
此外,我在iPhone上没有这个问题,我认为这是因为iPhone与iPad比较少。
任何人都可以对此问题做出一些解释吗?
答案 0 :(得分:3)
使用reloadData
时出现闪烁问题。我使用indexPathsForVisibleRows
和cellForRowAtIndexPath:
来解决它只更新可见单元格。性能很好,因为我不必迭代整个数据集,只需要有限数量的可见单元格。
答案 1 :(得分:0)
reloadData
导致tableview重新创建屏幕上的可见单元格,这可能导致闪烁,因为单元格被破坏。有更好的方法来重新加载tableview。您使用的是Core Data吗?如果是这样,NSFetchedResultsController及其delegate是更新tableview的好方法,因为它会监听基础数据源中的更改并仅更新相应的单元格。