iOS7 UITableview 在重新加载部分/行时很慢

Posted

技术标签:

【中文标题】iOS7 UITableview 在重新加载部分/行时很慢【英文标题】:iOS7 UITableview slow on reloading section/row 【发布时间】:2013-11-09 00:30:13 【问题描述】:

ios 7 上运行时,用于平滑地重新加载部分和行的 tableview 现在很慢。当我重新加载整个 tableview 表时,会立即加载,但调用 reloadRowsAtIndexPaths 或 reloadSections(使用 UITableViewRowAnimationNone)大约需要一秒钟才能完成.

我还没有在应用程序的这一部分使用 AutoLayout。单元格布局在具有相应自定义类的单独 Xib 文件中

【问题讨论】:

您应该使用 Instruments 分析应用程序并查看在表重新加载期间占用 CPU 时间的原因。更新您的问题,让我们来看看。 【参考方案1】:

您是否为单元格视图启用了自动布局?您是否在不可见时重新加载表视图(例如,当推送详细视图控制器时)?这似乎是一个已知的错误。请参阅此question/answer。苹果错误报告:rdar://15175803

基本上,您有一个多层次的解决方案,虽然并不完美,但会给您带来满意的结果。首先,这总是正确的,优化表格视图单元格中的约束。如果您动态修改了约束,请确保您不会导致不必要的布局和绘图。其次,如果表格视图不可见,请不要更新它。这感觉像是一种 hack,但没有其他选择(嗯,有一个,但它涉及禁用自动布局,这根本不是最佳选择,所以让我们忽略)。您可以在视图控制器中测试tableView.window 属性是否为nil,这表明表格视图已隐藏。如果没有隐藏,则正常更新,如果是,则不要更新。只需设置一个表已更新的标志。在viewWillAppear: 上调用reloadData 来更新表格。您可以通过在表格视图中查询选定的索引路径并在重新加载数据后再次选择它们来保留选择。

【讨论】:

实际上我还没有在应用程序的这一部分使用 AutoLayout。单元格布局在具有相应自定义类的单独 Xib 文件中。

以上是关于iOS7 UITableview 在重新加载部分/行时很慢的主要内容,如果未能解决你的问题,请参考以下文章

重新加载 UITableView 而不重新加载标题部分

除了部分的特定行之外,是不是可以重新加载 UITableView?

UITableView 不重新加载部分和内容

在 UITableView 中重新加载部分

重新加载时阻止透明 UITableView 部分标题闪烁

iOS7 中 NSFetchedResultsController 的问题?