Я принял новый UICollectionViewDiffableDataSource. Я применяю моментальный снимок источника данных каждый раз, когда удаляю элемент:
var snapshot = NSDiffableDataSourceSnapshot<Int, Item>()
snapshot.appendSections([0])
snapshot.appendItems(items)
apply(snapshot, animatingDifferences: true)
Удаление предлагается через опцию конфигурации представления встроенного сбора:
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
}
Если я удаляю элемент извне контекстное меню, анимация работает отлично. Если я удаляю из контекстного меню, одна ячейка исчезает, а затем вызывает следующий fla sh. Я подозреваю, что существует какой-то конфликт между закрытием контекстного меню и запуском удаления анимации. Я ищу способ обойти это.