【问题标题】:iOS Swift update UICollectionView dynamicallyiOS Swift 动态更新 UICollectionView
【发布时间】:2015-12-06 16:27:55
【问题描述】:

嗯,我有一个非常烦人的动态更新 CollectionView 的问题。我总是收到错误:“UICollectionView 收到的具有索引队列路径的单元格的布局属性不存在”

我做了一个显示水果的基本设计,添加了一个只显示苹果的按钮,当我点击这个按钮时,抓取只有苹果的内容并发送更新 CollectionView,我看到了这个错误......

这里是动态更新我的 CollectionView 的方法:

@IBAction func showOnlyApple(sender: AnyObject) {
    var justApple = [FruitsObject]()
    for item in self.fruitsCollection{
        if (item.name! == "Maça") {
            justApple.append(item)
        }
    }
    self.fruits = justApple
    self.uiCollectionView.reloadData()
}

如果有人想查看错误,这里是项目: https://github.com/bkawakami/CollectionViewFruits

只需构建项目并单击“Só Maçã”按钮

有人通过或知道如何解决这个错误?

谢谢!

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewlayout


    【解决方案1】:

    在您的CardsLayout 类中,您正在循环通过一个永远不会更新的cache 变量来设置布局属性。您看到此错误是因为您正在返回数据源中不再存在但仍存在于 cache 中的单元格的布局属性。解决此问题的一种方法是将您的 layoutAttributesForElementsInRect(rect: CGRect) 更改为以下内容:

    override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        var layoutAttributes = [UICollectionViewLayoutAttributes]()
    
        // Clear the cache
        cache.removeAll()
    
        // Call prepare layout to repopulate the cache based on the new number of items
        prepareLayout()
    
        for attributes in cache {
            if CGRectIntersectsRect(attributes.frame, rect ) {
                layoutAttributes.append(attributes)
            }
        }
    
        return layoutAttributes
    }
    

    但是,这首先违背了 cache 的目的 - 现在您了解了问题,您应该能够相应地重新设计您的 CardsLayout 类。

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2022-01-17
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2016-08-07
      • 1970-01-01
      • 2016-10-13
      相关资源
      最近更新 更多