首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iOS 13上拖动时,UICollectionView单元格将捕捉到原始位置

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

Stack Overflow用户
提问于 2020-01-07 15:41:27
回答 2查看 600关注 0票数 4

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

https://imgur.com/kKq9xr3

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

代码语言:javascript
运行
复制
@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()
    }
}

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

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

EN

回答 2

Stack Overflow用户

发布于 2020-01-07 15:56:19

因为CollectionViews内置了iOS11拖放功能,所以你不再需要这么做了。

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

票数 0
EN

Stack Overflow用户

发布于 2020-02-26 05:53:36

经过一番折腾之后,我决定继续实现我自己的集合视图移动API,它反映了beginInteractiveMovementForItemupdateInteractiveMovementTargetPositionendInteractiveMovement方法。

这个SO answer很有帮助地说明了你必须重新实现的那种内部逻辑,如果合适的话,你还需要在拖拽和占位符单元格上实现滚动。特别是,您将创建被拖动单元格的快照(临时隐藏原始单元格),并在拖动时更新临时快照单元格的位置/样式。

这是苹果已经做了很多工作,所以如果你不是绝对需要控制拖拽或交换行为,绝对推荐使用iOS 11拖拽API(@trapper提到)。

我发现其他人似乎已经就此行为提交了radar,所以希望苹果公司能注意到这一点,并在未来的某个时候修复!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59624124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档