1

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

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

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

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

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

此外,我在 iPhone 中没有这个问题,我相信这是因为与 iPad 相比,iPhone 的行数更少。

任何人都可以就这个问题给出一些解释吗?

4

2 回答 2

3

我在使用时遇到了同样的闪烁问题reloadData。我通过使用indexPathsForVisibleRowscellForRowAtIndexPath:仅更新可见单元格来解决它。性能很好,因为我不必遍历整个数据集,而只需遍历有限数量的可见单元格。

于 2013-04-11T07:09:31.573 回答
0

reloadData导致 tableview 重新创建屏幕上的可见单元格,这可能导致闪烁,因为单元格被破坏。有更好的方法来重新加载 tableview。你在使用核心数据吗?如果是这样,NSFetchedResultsController及其委托是更新 tableview 的好方法,因为它侦听底层数据源中的更改并仅更新适当的单元格。

于 2013-04-11T05:04:27.420 回答