SwiftUI表单选择器只显示一次

10

我正在尝试使用SwiftUI,并且目前正在使用Picker构建一个表单。

import SwiftUI

struct ContentView: View {
  private let names = ["Bill", "Peter", "Johan", "Kevin"]
  @State private var favoritePerson = "Bill"

  var body: some View {
    NavigationView {
      Form {
        Picker("Favorite person", selection: $favoritePerson) {
          ForEach(names, id: \.self) { name in
            Text(name)
          }
        }
      }
      .navigationBarTitle("Form", displayMode: .inline)
    }
  }
}

第一次点击“收藏的人”行时,选择器正常显示,点击其中一个名称会将您带回表单。但第二次点击表单行将不会产生任何作用:您不会进入选择器,行仍然高亮,但没有任何反应。如果这是SwiftUI的错误,是否有已知的解决方法?(我已经需要使用小型导航栏标题来解决Picker UI错误,否则当它被显示时其内容会向上移动 ☹️)


在 Xcode 11.2 上运行良好。如果您使用的是 11.3 版本,只需降级即可。 - Asperi
这难道不会重新引入一堆其他的错误吗?(还有,苹果公司,拜托了!唉。。。) - Kevin Renskers
就我所观察到的情况,11.3版本引入了大量的错误区域,而11.1版本是最稳定的。 - Asperi
不要认为这仅限于表单/选择器。我似乎在使用简单的NavigationLink时也会遇到这个问题,初始点击可以正常工作,但是后续的点击却没有任何反应。结构体ContentView: View { var body: some View { NavigationView { Section { NavigationLink(destination: Text("你好")) { Text("点我...") } } .navigationBarTitle("演示") } } }我正在使用Xcode 11.3 - sukh
2个回答

7
这个问题只出现在模拟器上。如果你在一个实际的iOS设备上构建应用程序,这个问题就不存在了。就像导航链接的bug一样,它只能工作一次。

你是正确的,这是NavigationLink的问题,表单选择器只是一个误导。 - Kevin Renskers

1

我在Xcode 11.4和真实设备上都遇到了同样的问题。选择器更改没有调用CreateTab,它仅在初始化时起作用。

Picker("Numbers", selection: $selectorIndex) {
            ForEach(0 ..< formData.tabs.count) { index in
                Text(formData.tabs[index].name).tag(index)
            }
          }
          .pickerStyle(SegmentedPickerStyle())
          .onReceive([self.selectorIndex].publisher.first()) { (value) in
            print(value)
            CreateTab(tabs: formData.tabs, index: self.selectorIndex)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接