如何在不重新加载图像的情况下重新加载 collectionview 单元格

Posted

技术标签:

【中文标题】如何在不重新加载图像的情况下重新加载 collectionview 单元格【英文标题】:How to reload a collectionview cell without reloading an image 【发布时间】:2016-10-24 17:49:34 【问题描述】:

我有一个集合视图,当发生变化时,我会更新数据源并重新加载发生变化的单元格。重新加载时,单元格会闪烁。它并没有真正影响用户滚动,我让它几乎不明显:

UIView.performWithoutAnimation
     self.collectionView.reloadItemsAtIndexPaths([NSIndexPath(forItem: index, inSection: 0)])

这是我能做的最好的事情,以使重新加载不那么明显。我有一个占据整个单元格的背景图像。我认为我看到的闪存是这个图像重新加载,但我不需要它重新加载,因为图像永远不会改变。有谁知道如何使单元格重新加载而不是图像?我可以在其中放置一个变量并进行更改,例如 (initialLoad = false),但我不知道如何防止图像重新加载。

【问题讨论】:

图片从何而来?它是笔尖的一部分,还是您将其加载到“cellForItemAtIndex”中的某个位置? 它从数据源(来自 url)或缓存(如果已被缓存)加载到自定义单元类中(使用 pincache) 【参考方案1】:

尝试将所有单元设置移动到 UICollectionViewCell 子类中的内部函数:

class MyCollectionViewCell: UICollectionViewCell 

    var initialLoad = true

    // since collection view cells are recycled for memory efficiency,
    // you'll have to reset the initialLoad variable before a cell is reused
    override func prepareForReuse() 
        initialLoad = true
    

    internal func configureCell() 

        if initialLoad 
            // set your image here
        

        initialLoad = false

        // do everything else here
    


然后从您的视图控制器调用它:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyCollectionViewCell
    cell.configureCell()
    return cell

您可以向configureCell() 函数添加参数,以传入设置单元格所需的任何数据(假设您需要传入对图像的某种引用)。如果您有很多信息,您可能想要创建一个自定义对象来保存所有这些信息,然后将其作为参数传递给函数。

【讨论】:

是的,我正在做类似的事情,但是因为我使用的是 asyncdisplaykit,所以布局出现了问题,但我仍然认为只需修改布局就可以了,会回来的之后标记为正确,只要它可以正常工作,我不明白为什么它不会。 我有点担心它只是没有图像。我不确定它是否会保留原始图像,或者在重新加载后根本没有图像。 如果由于某种原因它不适用于您的设置,请使用相关代码和问题编辑您的问题,我会看看。

以上是关于如何在不重新加载图像的情况下重新加载 collectionview 单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载整个页面的情况下重新加载 div?

如何在不重新加载 visibleCell 的情况下在 collectionView 上重新加载数据

如何在不注销并重新登录的情况下重新加载 .bashrc 设置?

如何在不重新启动 apache 的情况下为站点重新加载 apache 配置?

如何在不重新加载标题的情况下重新加载 UICollectionView 中的单元格?

如何在不重新启动的情况下在 Express 上重新加载一个文件?