Swift editMode激活时选择器不工作

Swift editMode激活时选择器不工作,swift,swiftui,swiftui-picker,Swift,Swiftui,Swiftui Picker,我有一个视图(表单),它基本上有一个选择器和一个可以由用户重新安排的项目列表。我希望列表始终是可编辑的,因此用户不必点击en Edit按钮(对于我来说,编辑按钮只影响表单的一小部分似乎是不自然的) 通过设置环境变量editMode:.environment(\.editMode、.constant(.active)),我成功地完成了前面提到的始终打开编辑 问题在于,当表单可编辑时,选择器停止工作(即,当您点击表单时,它不会切换到选项列表) 这是一个重现我问题的MCVE: import Swif

我有一个视图(
表单
),它基本上有一个选择器和一个可以由用户重新安排的项目列表。我希望列表始终是可编辑的,因此用户不必点击en Edit按钮(对于我来说,编辑按钮只影响表单的一小部分似乎是不自然的)

通过设置环境变量
editMode
.environment(\.editMode、.constant(.active))
,我成功地完成了前面提到的始终打开编辑

问题在于,当表单可编辑时,选择器停止工作(即,当您点击表单时,它不会切换到选项列表)

这是一个重现我问题的MCVE:

import SwiftUI

struct SampleView: View {
  enum SortBy: String, CaseIterable {
    case FirstName
    case LastName

    var name: String {
      switch (self) {
      case .FirstName:
        return "First name"
      case .LastName:
        return "Last name"
      }
    }
  }
  @State var sortBy = SortBy.FirstName

  var body: some View {
    Form {
      Section(header: Text("General")) {
        Picker("Sort by", selection: $sortBy) {
          ForEach(SortBy.allCases, id: \.self) { sortBy in
            Text(sortBy.name).tag(sortBy)
          }
        }
      }

      Section(header: Text("Phone order")) {
        ForEach(1..<10) { number in
          Text("\(number)")
        }
        .onMove(perform: onMove)
        .padding(.leading, -39) // remove space dedicated to delete button
      }
    }
    .environment(\.editMode, .constant(.active)) // <--
    .navigationBarTitle(Text("Sample View"))
  }

  private func onMove(source: IndexSet, destination: Int) {
    // ...
  }
}

struct SampleView_Previews: PreviewProvider {
  static var previews: some View {
    NavigationView {
      SampleView()
    }
  }
}
导入快捷界面
结构示例视图:视图{
枚举排序:字符串,可大小写{
案例名
案例姓氏
变量名称:String{
开关(自){
案例.名字:
返回“名字”
案例。姓氏:
返回“姓氏”
}
}
}
@状态变量sortBy=sortBy.FirstName
var body:一些观点{
形式{
章节(标题:正文(“概述”)){
选择器(“排序依据”,选择:$sortBy){
ForEach(SortBy.allCases,id:\.self){SortBy in
文本(sortBy.name).tag(sortBy)
}
}
}
部分(标题:文本(“电话订单”)){

ForEach(1..目前看来,这种组合是不可能的…请在下面找到替代解决方案的建议变体-其想法是使用“仅在节中”按钮来激活重新排序

@State private var reorderMode:EditMode=.inactive
var body:一些观点{
形式{
章节(标题:正文(“概述”)){
选择器(“排序依据”,选择:$sortBy){
ForEach(SortBy.allCases,id:\.self){SortBy in
文本(sortBy.name).tag(sortBy)
}
}
}
节(标题:
HStack{
文本(“电话订单”)
垫片()
按钮(self.reorderMode==.inactive?“重新排序”:“完成”){
self.reorderMode=self.reorderMode==.active?.inactive:.active:
}
}
) {
ForEach(1.)。。
    @State private var reorderMode: EditMode = .inactive
    var body: some View {
        Form {
            Section(header: Text("General")) {
                Picker("Sort by", selection: $sortBy) {
                    ForEach(SortBy.allCases, id: \.self) { sortBy in
                        Text(sortBy.name).tag(sortBy)
                    }
                }
            }

            Section(header:
                HStack {
                    Text("Phone order")
                    Spacer()
                    Button(self.reorderMode == .inactive ? "Reorder" : "Done") {
                        self.reorderMode = self.reorderMode == .active ? .inactive : .active
                    }
                }
            ) {
                ForEach(1..<10) { number in
                    Text("\(number)")
                }
                .onMove(perform: onMove)
                    .padding(.leading, self.reorderMode == .active ? -39 : 0) // remove space dedicated to delete button
            }
        }
        .environment(\.editMode, $reorderMode)
        .navigationBarTitle(Text("Sample View"))
    }