iPad UITableView闪烁问题

时间:2013-04-11 04:43:36

标签: iphone ios objective-c ipad

我的UITableView在iPad的视口中包含大约20行。我有一个间隔计时器,会定期调用UITableView's reloadData(将其发布到UI线程)。

现在,当我以中速(不是那么快)滚动UITableView时,UITableView会刷新闪烁效果。

我必须通过循环遍历数组中的所有项目来编写一个手动更新UITableViewCell标签的函数(此数组保留UITableView上显示的所有项目)。我将在计时器运行时执行此函数,而不是调用reloadData(如上所述)。然后闪烁的问题就消失了。

我相信reloadData应该比循环遍历所有数据更好,因为reloadData只会刷新当前显示的Cell而不是所有行,但我无法弄清楚闪烁发生的原因。谁知道为什么?

我必须提到的一件事是我确实正确地使用CellIdentifier来重用单元格,并且只在检索到的单元格为空时创建单元格。

此外,我在iPhone上没有这个问题,我认为这是因为iPhone与iPad比较少。

任何人都可以对此问题做出一些解释吗?

2 个答案:

答案 0 :(得分:3)

使用reloadData时出现闪烁问题。我使用indexPathsForVisibleRowscellForRowAtIndexPath:来解决它只更新可见单元格。性能很好,因为我不必迭代整个数据集,只需要有限数量的可见单元格。

答案 1 :(得分:0)

reloadData导致tableview重新创建屏幕上的可见单元格,这可能导致闪烁,因为单元格被破坏。有更好的方法来重新加载tableview。您使用的是Core Data吗?如果是这样,NSFetchedResultsController及其delegate是更新tableview的好方法,因为它会监听基础数据源中的更改并仅更新相应的单元格。