我已经阅读并查看了几篇提到这一点的帖子。我尽力跟上,但我还是有问题。
self.items.append(contentsOf: newItems)
let newIndexPath = IndexPath(item: self.items.count - 1, section: 0)
DispatchQueue.main.async {
self.collectionView.insertItems(at: [newIndexPath])
}
Items是我拥有所有项的数组,我正在添加newItems。我打印了一份,我知道有新的项目。所以对于newIndexPath,它将是下一个items.count-1。我尝试使用self.items.count - 1
和self.collectionView.numberOfItems(inSection: 0)
您是否使用以下委托方法?您的代码非常有限,没有提供太多信息。但是,我认为您正在尝试在不重新加载collectionView数据的情况下更新collectionView部分中的项目数。
更好的做法如下:
extension ViewController : UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
else { fatalError("Unexpected cell in collection view") }
cell.item = self.items[indexPath.row]
return cell
}
如果您正在更新项目数组,则追加新项目并重新加载集合View将更新列表。你可以做如下操作:
self.items.append(contentsOf: newItems)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
无需在collectionView中插入新项目。