SwiftUI .move修饰器在iPhone及iOS 15 iPad模拟器上失效问题
SwiftUI onMove修饰器运行异常问题说明
复现表现
onMove修饰器在以下环境无法正常触发移动回调:运行iOS 14.7.1的iPhone设备、iOS 15.0版本iPad模拟器、14.5版本iPad Pro模拟器- 该修饰器在以下环境功能正常:运行14.7.1、14.4系统的iPad Pro真机、macCatalyst运行环境
- 截至问题反馈时,苹果官方文档未标注
onMoveAPI在iOS 15版本中被弃用
开发环境信息
开发设备为搭载M1芯片的MacBook,运行macOS 11.5.1系统,使用Xcode 13.0 beta 5进行开发
更新: 新增14.5版本iPad Pro模拟器测试,同样无法触发元素移动逻辑,可初步判断拖放重排相关能力在iOS模拟器上不受支持。iPhone端仅支持有限的系统级拖放能力,第三方应用内列表拖拽重排的适配存在系统层面限制。
问题示例代码
struct MoveElementsWork: View { @State private var elements = [1,2,3,4,5] var body: some View { List { ForEach(elements, id: \.self) { element in Text("\(element)") } .onMove { _,_ in print("Moving") } } } }
排查建议
- 上述示例代码未添加编辑模式入口,若要触发
onMove逻辑,需要在导航栏添加EditButton(),进入编辑模式后才可唤起列表拖拽重排操作 - 拖放相关功能调试优先使用真机进行,模拟器对该类API的支持存在缺陷,无法复现真机的完整运行表现
内容的提问来源于stack exchange,提问作者cire1776
相关产品推荐
相关产品推荐

