Перетаскивание между представлениями коллекции приводит к ошибке подтверждения - PullRequest
0 голосов
/ 12 января 2020

Я использую API перетаскивания UICollectionView для перетаскивания ячеек между представлениями коллекции, а также в пределах одного представления коллекции.

Это работает, как и ожидалось, при перетаскивании ячейки в исходном представлении коллекции, однако, когда я перетаскиваю эту ячейку на другое представление коллекции, я получаю следующее:

... *** Assertion failure in -[UICollectionView _updateRowsAtIndexPaths:updateAction:updates:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3901.4.2/UICollectionView.m:6265

Событие с его простейшей реализацией для dropSessionDidUpdate:, что происходит:

func collectionView(_ collectionView: UICollectionView,
                    dropSessionDidUpdate session: UIDropSession,
                    withDestinationIndexPath destinationIndexPath: IndexPath?) -> UICollectionViewDropProposal {
    return .init(operation: .move, intent: .insertAtDestinationIndexPath)
}

Это всегда происходит, когда операция .move или .copy.

, насколько я понимаю, это должно "просто работать", а dropSessionDidUpdate: должно обеспечивать приятную визуальную обратную связь о потенциальном падении здесь.

Стоит также отметить, что все виды коллекций используют один и тот же код (каждый UICollectionViewController одного типа).

Обновление 1

Это, похоже, "работает" "при возврате .init(operation: .move) без параметра intent. Хотя анимации отсутствуют, данные перемещаются, а представление коллекции обновляется ...

Обновление 2

Как и выше, это также работает при возврате .init(operation: .move, intent: .insertIntoDestinationIndexPath) или .init(operation: .move, intent: .unspecified). Здесь нет внушительных анимаций, но контент успешно удален.

...