UICollectionView初始滞后

时间:2015-11-27 19:26:24

标签: ios swift uicollectionview swift2 ios9

我已经在SO上发现了几个关于UICollectionView滚动滞后的帖子,但是大多数都处理了图像,我的情况有点不同而且更基本。

我有一个uicollectionview显示当前年份,过去一年和下一年(所以36个部分,每个部分x天数)。所有这些都在视图的负载上进行了整理,并且与我的方式相当快。

然而,问题是,在uicollectionview中发生的初始滚动有一个非常轻微但明显的延迟,然后在那之后,一切都是黄油。

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!
    {

        let day = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CalendarDayCollectionViewCell

所以你可以在这里看到,我有一个自定义单元格,我正如上面那样访问它。如果我在当月,那么上述被称为31次(或者那个月有多少天)。

即使我在上面的代码中注释掉了所有内容(并且只是'天',没有其他代码,它仍然落后。)

我尝试过的其他事情:

  1. 在dispatch_async
  2. 中包装我能做的一切
  3. 删除几乎所有代码以使骨架页面运行。它仍然有一个初始滞后,几乎就像纯粹的部分/项目的问题一样。
  4. 所以我读到的一件事是,我每次都会重新加载单元格,这会造成初始延迟?

    let day = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CalendarDayCollectionViewCell 
    

    有人写道,你需要让它成为一个单例并停止重新实例化,而是一次又一次地访问同一个。真的吗?我看不到任何实际执行此操作的代码。我试过这样的事情:

    if (day == nil)
            {
                day = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CalendarDayCollectionViewCell
            }
    

    并在顶部宣布了一个初始零值,但这只会导致我的应用冻结并变得无法响应。

    有人可以提出其他想法吗? 请记住,诸如“你可能正在获取图像,或者一些长时间运行的数据库调用等”之类的想法并没有发生 - 我删除了所有代码,因此应用程序现在甚至都没有做任何事情,而且还有一个非常轻微,比如1/4秒之前的延迟。

    如果我把所有代码都放回去,它仍然会做同样的事情(初始滞后,然后一切都变黄)。

    有任何想法/建议吗?

    非常感谢!

0 个答案:

没有答案