0

我有一个包含多个单元格的 UITableView,其中一些单元格(用于仍在上传的文件)同时具有 UIActivityIndi​​cator 和 UIProgressView。完成的文件使用不同的图标(而不是活动指示器)并隐藏进度视图。

该表使用 NSFetchedResultsController 作为数据源,因此我获取了数据模型的更新并更新了内容。

一切正常。然而,问题在于性能。每次我调用reloadData我的 UIActivityIndi​​cators 都会闪烁,而且不是很流畅。尽管我正在从 nib 文件中进行缓存,但reloadData将不得不计算 ProgressView 的新进度百分比,并且除了在上传完成时将其隐藏之外,我不会对 ActivityIndi​​cator 执行任何操作。

有人试过类似的东西吗?有解决方法吗?

我正在考虑拥有一组我的进度视图引用并使用它而不是调用 reloadData.. 不确定这是否是正确的方法。

谢谢,

费尔南多

4

1 回答 1

1

当您调用UITableViewreloadData时,表格视图的所有单元格都会完全刷新、重新组装和重绘。所有旧的都被扔掉了。这意味着UITableViewCells的所有子视图也被删除并重新创建(包括您的UIActivityIndi ​​cator和UIProgressView)。刷新会导致这些视图闪烁,或者可能跳回到它们的开始状态。由于无法设置UIActivityIndi​​cator的框架,因此您根本不可能恢复一些进度值的建议。

相反,也许您应该尝试将“刷新”设计为不需要完全刷新表?例如,如果您想更改视图中UITextField的文本,您可以简单地访问此文本字段并设置 text 属性(无需刷新)。或者,如果您想隐藏进度指示器,您可以进入适当的对象实例并设置它们的属性。您应该设计您的应用程序,使之成为可能。以这种方式进行更改可以避免从头开始重新加载单元格。

除了解决问题的好处之外,使用这种更新方法,您还应该看到性能大幅提升。是一种非常昂贵的使用方法,只有在绝对有必要从头开始reloadData真正重新创建整个UITableView时才应使用。

希望这可以帮助。:)

于 2011-02-04T23:42:53.260 回答