在 iOS 13 上拖动时 UICollectionView 单元格会捕捉到原始位置

wsu*_*sun 5 ios uicollectionview swift

我有一个UICollectionViewController使用交互式移动 API 来支持单元格重新排序的项目。当单元格被拖动到不同的位置,然后返回到其原始位置时,它会捕捉/跳到位。该问题仅发生在 iOS 13 上,不会发生在 iOS 11 或 iOS 12 上。

https://i.stack.imgur.com/9xRrN.jpg

我使用以下方法来处理集合视图单元格的长按:

@objc private func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
    switch recognizer.state {
    case .began:
        guard let selectedIndexPath = collectionView.indexPathForItem(at: recognizer.location(in: collectionView)) else {
            break
        }
        collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)

    case .changed:
        collectionView.updateInteractiveMovementTargetPosition(recognizer.location(in: collectionView))

    case .ended:
        collectionView.endInteractiveMovement()

    default:
        collectionView.cancelInteractiveMovement()
    }
}
Run Code Online (Sandbox Code Playgroud)

这里提供了一个最小的可重现示例: https: //github.com/wsun/ios13DragDrop

我想坚持使用交互式移动 API,而不是使用较新的 iOS 11 拖/放 API,因为它允许控制用户可以将单元格拖动到的位置。由于我没有做任何特别新颖的事情,我怀疑这可能是 iOS 13 中的 UIKit 回归。有人有任何建议或解决方法来解决这个问题吗?

tra*_*per 0

由于 iOS11 拖放功能内置于 CollectionViews 中,因此您不再需要这样做。

https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/supporting_drag_and_drop_in_collection_views