UICollectionView滚动滞后

时间:2013-12-10 12:32:56

标签: performance scroll collectionview

我在单元格中设置了一个包含10个子视图的集合视图。

子视图是 -imageview上有标签 - 文本视图 -imageview -uilabel -imageview -uilabel

最初,集合视图在iPad上显示了15个单元格。当我需要更换底部或顶部的单元格(重复使用单元格)时,滚动暂停时滚动暂停。我删除了阴影,但问题仍然存在。

因此,当重复使用旧单元格时会出现问题。

顺便说一句,没有通过网络加载的图片。

3 个答案:

答案 0 :(得分:5)

我很久以前就得到了答案,但为了其他人的利益,可能会遇到同样的问题。

除了删除阴影外,您还需要删除“清晰颜色”背景。任何需要额外处理的附加图纸都应该被移除或替换为替代。任何繁重的工作,文本格式化,日期格式化都应该在显示集合或表视图之前完成。确保您的单元格仅进行演示而不进行处理。如果你无法避免它在另一个线程上进行处理。

要测量滚动速率,您需要使用仪器>图形>用于测量帧速率的核心动画工具。

尝试一下,你会注意到不同之处。

答案 1 :(得分:4)

编辑:无需尝试自动调整屏幕,只需阅读有关UICollectionView性能提升的简短文章http://noxytrux.github.io/blog/2014/09/25/ios8-weirdness-part3-laggy-uicollectionview/

可能是自动布局开销。请考虑尝试自动调整遮罩。

您可以提交所有内容并进行实验:

  1. 关闭单元格xib文件的自动布局
  2. 运行应用程序来测试性能(不要担心乱糟糟的布局)
  3. 设置自动调整遮罩(如果需要,可以在代码中进行布局),而不是在效果明显的情况下自动布局
  4. 我通过这种方式解决了我的UICollectionView性能问题。当你一次拥有大量可见细胞时,它会有所帮助。

    另外,如果您有图片观看次数,请参阅此回答Setting image property of UIImageView causes major lag

    不要忘记乐器:运行 Time Profiler ,看看你的主线程时间最多吃什么。

答案 2 :(得分:0)

我想这个问题也可能是因为ImageView。

使用Kingfisher 5来预取,加载,显示和缓存图像将解决此问题。

let url = URL(fileURLWithPath: path)
let provider = LocalFileImageDataProvider(fileURL: url)
imageView.kf.setImage(with: provider)

https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet#image-from-local-file