Ошибка анимации при удалении элемента UICollectionViewDiffableDataSource из контекстного меню - PullRequest
4 голосов
/ 20 января 2020

Я принял новый 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. Я подозреваю, что существует какой-то конфликт между закрытием контекстного меню и запуском удаления анимации. Я ищу способ обойти это.

...