无效的 UICollectionView 更新

Invalid UICollectionView Update

我有一个分段的 uicollectionview 嵌套单元格,可以点击删除。

我的目标是显示来自数据源的单元格(如果可用),如果不可用,则显示一个 "placeholder" 单元格,说明当前没有可用数据。

我的问题出现在删除给定部分下的最后一个剩余单元格时。我的 numberOfItemsInSection 是 1,专门用于 "placeholder" 单元格,但应该为 0 以与没有更多数据可用的数据源 0 对齐。

有什么变通办法吗?

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 3
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if sectionItems[section].count == 0 {
        return 1
    }
    else {
        return sectionItems[section].count
    }
}

func onTap() {
    self.sectionItems[indexPath.section]?.remove(at: indexPath.item)
    self.exampleCollectionView.deleteItems(at: [indexPath])
}

删除最后一项时,您需要重新加载 "No Items" 单元格。这样的事情应该有效:

func onTap() {
    sectionItems[indexPath.section]?.remove(at: indexPath.item)
    let isEmpty = sectionItems[indexPath.section]?.count ?? 0 == 0

    exampleCollectionView.performBatchUpdates({
        if isEmpty {
            self.exampleCollectionView.reloadItems(at: [indexPath])
        } else {
            self.exampleCollectionView.deleteItems(at: [indexPath])
        }
    }, completion: nil})
}

本质上,您需要告诉 collectionView 在删除最后一项时更新后仍然会有一个单元格。