8

我正在玩 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 错误,否则它的内容会在显示时向上移动☹️)

4

2 回答 2

7

这个问题只是模拟器的一个问题。如果您在物理 iOS 设备上构建应用程序,则不再是问题。就像导航链接的错误一样,只能工作一次。

于 2020-01-08T21:07:18.813 回答
0

我在 Xcode 11.4 和真实设备中也有同样的问题。Picker change 没有调用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)
}
于 2020-05-04T17:09:37.060 回答