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

SwiftUI:List处于编辑模式时如何隐藏ToolbarItem?

问题修正方案

你的问题出在编辑状态的同步和视图刷新机制上:EditButton与List的编辑模式没有正确绑定,导致点击两次才生效;同时依赖环境变量editMode判断按钮显示时,状态更新无法及时触发视图刷新。

以下是修正后的代码:

import SwiftUI

struct TestView: View {
    @Environment(\.dismiss) var dismiss
    // 用自定义状态变量控制编辑模式,替代环境变量
    @State private var isEditing = false
    @State var tests: Array<String> = ["A","B","C"]
    
    var body: some View {
        NavigationStack{
            List{
                Section("Recent"){
                    ForEach(tests, id:\.self){ test in
                        Text(test)
                    }
                    .onDelete{ indexes in
                        tests.remove(atOffsets: indexes)
                    }
                    .onMove{ source, destination in
                        tests.move(fromOffsets: source, toOffset: destination)
                    }
                }
            }
            .navigationTitle("Test")
            // 将List的编辑状态与自定义变量绑定
            .listEditMode($isEditing)
            .toolbar{
                ToolbarItem(placement: .navigationBarLeading){
                    // EditButton直接绑定状态变量,一次点击即可切换模式
                    EditButton(isEditing: $isEditing)
                }
                // 根据状态变量判断是否显示Finished按钮
                if !isEditing {
                    ToolbarItem(placement: .navigationBarTrailing){
                        Button("Finished"){
                            dismiss()
                        }
                    }
                }
            }
        }
    }
}

#Preview {
    TestView()
}

修正说明:

  • 替换环境变量editMode为自定义@State变量isEditing,确保状态变化能直接触发视图刷新。
  • 通过.listEditMode($isEditing)将List的编辑状态与isEditing绑定,EditButton也直接绑定该变量,实现一次点击切换编辑模式。
  • 直接用!isEditing判断按钮显示,状态更新后会立即触发Toolbar的重绘,解决点击Done后按钮不显示的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:23