gpt4 book ai didi

ios - 从上下文菜单中删除 UICollectionViewDiffableDataSource 项时出现动画故障

转载 作者:行者123 更新时间:2023-12-01 15:36:32 28 4
gpt4 key购买 nike

我采用了新的 UICollectionViewDiffableDataSource。每次删除项目时,我都会应用数据源快照:

var snapshot = NSDiffableDataSourceSnapshot<Int, Item>()
snapshot.appendSections([0])
snapshot.appendItems(items)
apply(snapshot, animatingDifferences: true)

删除是通过内置的 Collection View 配置选项提供的:
func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
guard let item = dataSource.itemIdentifier(for: indexPath) else {
return nil
}

let configuration = UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
let delete = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), attributes: .destructive) { _ in
self.deleteItem(item)
}

return UIMenu(title: "", image: nil, identifier: nil, children: [delete])
}
return configuration
}

如果我从上下文菜单之外删除该项目,则动画效果很好。如果我从上下文菜单中删除,则一个单元格会消失,然后会导致下一个单元格闪烁。我怀疑关闭上下文菜单和运行删除动画之间存在某种冲突。我正在寻找解决此问题的方法。

最佳答案

编辑:这非常稳定,导致 UI 卡住和其他奇怪的故障,有时它对长按没有响应,不要使用它。我希望这个 API 没有那个故障,这很烦人。

我也发现了这个丑陋的故障,并且非常接近放弃,直到我想我会尝试实现其他交互 API 而不是 UICollectionView 上的内置 API。 ,奇怪的是动画消失了。

首先将交互添加到您的单元格contentView

let interaction = UIContextMenuInteraction(delegate: self)
cell.contentView.addInteraction(interaction)

然后实现委托(delegate),大概是你展示单元格的地方,在我的例子中是 viewController
extension ViewController : UIContextMenuInteractionDelegate {
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {

// loop through all visible cells to find which one we interacted with
guard let cell = collectionView.visibleCells.first(where: { $0.contentView == interaction.view }) else {
return nil
}

// convert it to an indexPath
guard let indexPath = collectionView.indexPath(for: cell) else {
return nil
}

// continue with your magic!
}
}

瞧,就是这样,没有更多的故障动画。
我不知道是否有一些边缘情况会选择错误的单元格或其他奇怪的东西,但这似乎工作得很好。

关于ios - 从上下文菜单中删除 UICollectionViewDiffableDataSource 项时出现动画故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815822/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com