我有一个CollectionView,显示从在线Web应用程序填充的单元格,单击该对话框时,可以选择从该Web应用程序中删除。
如果api调用成功并且Web应用程序不再存储该单元,我使用完成处理程序仅重新加载数据。但是,reloadData()在调用时不会显示少一个单元格。我尝试过layoutIfNeeded(),setNeedsDisplay()和collectionViewLayout.invalidateLayout()。
他们都没有做任何事情,删除的单元格总是留在那里.. 但是如果我使用导航控制器向后移动然后再使用CollectionView前往视图,它就会消失。有人可以提出解决方案吗?
private func startWaterfallAnimation() {
var timer = Timer.init()
timer = Timer.scheduledTimer(withTimeInterval: 0.06, repeats: true) { (_) in
if !self.isPaused{
UIView.animate(withDuration: 0.06, delay: 0, options: [.curveLinear], animations: {
self.setContentOffset(CGPoint(x: self.contentOffset.x, y: self.contentOffset.y - CGFloat(self.speed)), animated: false)
}, completion: nil)
} else {
timer.invalidate()
}
}
}
使用numberOfItemsInSection更新:
@IBOutlet weak var inviteCollectionView: UICollectionView
func declineInvite(id: Int)
{
requestModel.deleteRequest(id: id, completion: { success in
if(success)
{
DispatchQueue.main.async {
print("This happens")
self.inviteCollectionView.collectionViewLayout.invalidateLayout()
self.inviteCollectionView.reloadData()
self.inviteCollectionView.layoutIfNeeded()
}
}
else{
print("Failed deleting group")
}
})
}
requestTuples来自
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return requestTuples.count
}
答案 0 :(得分:0)
您的删除请求的问题是您没有从具有指定ID的数组requestTuples
中删除该项,您只需重新加载collectionView
func declineInvite(id: Int) {
requestModel.deleteRequest(id: id, completion: { success in
if(success) {
DispatchQueue.main.async {
self.requestTuples.remove(at:id)
self.inviteCollectionView.reloadData()
}
} else {
print("Failed deleting group")
}
})
}