Я использую 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)
. Здесь нет внушительных анимаций, но контент успешно удален.