You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI EditMode下隐藏List汉堡图标且保留onMove拖拽功能的实现方法

SwiftUI EditMode下隐藏List重排汉堡图标方案

适配全系统版本方案(支持iOS13+)

通过调整行布局偏移把系统默认的重排图标挤出可视区域,再裁剪溢出内容,完全保留拖拽重排能力:

List {
    ForEach(items) { item in
        item.contextMenu {
            // 原有上下文菜单逻辑
        }
        // 向左偏移30(覆盖默认重排图标宽度,可自行调整)
        .offset(x: -30)
        // 抵消偏移带来的右侧空白
        .padding(.trailing, -30)
    }
    .onMove(perform: onMove)
}
.environment(\.editMode, $editMode)
.listStyle(.plain) // 非必须,可保留你原有使用的List样式

该方案不需要调用moveDisabled,不会影响拖拽重排功能,重排手势响应区域和原有逻辑完全一致。

iOS16+原生方案

iOS16新增了重排控件显隐控制的原生修饰符,是最标准的实现方式:

List {
    ForEach(items) { item in
        item.contextMenu {
            // 原有上下文菜单逻辑
        }
        .listRowReorderControl(.hidden) // 直接隐藏重排汉堡图标
    }
    .onMove(perform: onMove)
}
.environment(\.editMode, $editMode)

注意事项

  • 两个方案均完整保留.onMove对应的拖拽重排功能,不需要修改原有重排逻辑
  • 全系统方案的偏移量可以根据你的List行高、样式自行调整,只要确保重排图标被挤出可视区域即可
  • 如果你的应用最低支持版本在iOS16及以上,优先选择原生修饰符方案,不需要额外适配布局

内容的提问来源于stack exchange,提问作者Ryan Hillis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:06:04