UICollectionView Cell 复用导致的坑

作者: SmallflyBlog | 来源:发表于2017-10-26 18:56 被阅读1701次

    UICollectionViewCell 在 UICollectionView 内部会进行缓存,并在 Cell 滚出屏幕的时候对其复用,如果不了解复用机制,往往会遇到莫名其妙的问题。

    一个简单的场景:在同一屏幕内,CollectionView 显示本地图片和网络图片,如果在本地图片显示之后,网络图片显示之前,调用 reload 的方法就会显示异常。

    realod.gif

    原因是 CollectionView 在页面没有滚动的情况下调用 reload方法,不会重新创建 cell,而是用前面缓存的 cell 进行复用。和第一次显示不同的是,复用 cell 并没有拿它原先所在的 indexPath,而是 [0, 0] 下的 cell 复用了 [0, 3] 的 cell。

    在 [0, 3] indexPath 的 cell 第一次出现的时候发起网络图片请求,而在请求完成之前reload 了一次,导致 [0, 3] 处的 cell 被复用在 [0, 0],当图片获取成功,显示在了 [0, 0] cell 上,从而替换了原来的本地图片。

    为了避免出现这个问题,需要尽可能的减少 reload 整个 collectionView,在必须要刷新的时候,可以将多处数据源的修改合并到一次 reload

    Demo

    相关文章

      网友评论

        本文标题:UICollectionView Cell 复用导致的坑

        本文链接:https://www.haomeiwen.com/subject/tookpxtx.html