我当前遇到的有趣问题。在某些情况下,在UICollectionView实例上调用performBatchUpdates方法时,将导致不执行完成处理程序。
collectionView.performBatchUpdates({
collectionView.insertItems(at: indexPaths)
}) { _ in
if self.delegate.responds(to: #selector(self.delegate.sectionNeedsToBeHidden)) {
self.delegate.sectionNeedsToBeHidden?()
}
}
}
在向collection view
进行插入时,不会调用完成处理程序。但是,当执行相同的逻辑(除了将行collectionView.insertItems(at: indexPaths)
更改为collectionView.deleteItems(at: indexPaths)
之外)时,将调用完成处理程序。我目前对发生这种情况的原因的猜测是关于收集视图的先前状态的,因此它仅在删除后将更改注册到数据源,从而导致调用完成处理程序。但是,对于仅在删除项目而不插入项目时调用completionHandler
的{{1}}的原因,该解决方案并不确定。如果有人对这个确切问题有任何见解,或者对performBatchUpdates
的工作原理有任何见解,我将不胜感激
答案 0 :(得分:0)
每当您插入一行或从集合视图中删除项目时,都必须更新一些项目数据,例如下面的代码
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.myItems.count
}
self.myItems.count
首先需要更新。因此,请先更新您的商品计数,然后执行批量更新。