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
相关产品推荐
相关产品推荐

