【问题标题】:Loading multiple cells from XIBs in UICollectionView makes scrolling laggy on the first load从 UICollectionView 中的 XIB 加载多个单元格会导致第一次加载时滚动延迟
【发布时间】:2016-04-04 12:58:21
【问题描述】:

我有一个包含 7-8 个不同单元格的集合视图。单元在 XIB 文件中构建。然后在视图控制器中我使用:

  [self.collectionView registerNib:[UINib nibWithNibName:name bundle:nil] forCellWithReuseIdentifier:name];

一切都按预期工作,但存在一些性能问题。在第一个滚动集合视图中,随着单元格的出现明显滞后。在所有类型的单元格至少加载一次之后,一切都开始顺利滚动。细胞其实并不复杂。

:你为什么还要使用 XIB,为什么不在故事板中使用原型单元格?
A:相同的单元格在不同的集合视图中使用应用程序。这样我就可以在 xib 中对单元格应用一次更改。我想不出更简单的解决方案来做到这一点。

我很确定 UINib 在加载后会被缓存,这就是它停止滞后的原因。例如,我想知道是否有办法在启动屏幕上预加载这些 xib。这需要一两秒钟,但会带来更流畅的体验。

【问题讨论】:

  • 我认为延迟的问题来自这些单元格中的布局视图。我对tableView 有类似的问题。特别是如果您使用动态大小。

标签: ios objective-c xcode caching uinib


【解决方案1】:

UINib 在加载后会被缓存,有很多原因会导致滚动延迟:

  • 您在做一些复杂的布局计算吗?
  • 您是在单元格中设置大图像还是在主线程上执行密集任务以调整它们的大小?
  • 您有复杂的透明胶片吗?
  • 您是否正在做一些需要离屏渲染的事情,例如 cornerRadius 上的 layer

使用工具您可以真正检查大部分问题,例如Time Profiler 将帮助您检查是否有东西阻塞了 UI,使用模拟器您可以激活 Color Blended Layer 来搜索透明胶片(红色)和 Color Offscreens render 检查屏幕外渲染视图(黄色)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多