SwiftUI 表单选择器只显示一次
SwiftUI Form Picker only shows once
我正在使用 SwiftUI,目前正在使用选择器构建一个表单。
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)
}
}
}
您第一次点击 "Favorite person" 行时,选择器显示正常,点击其中一个姓名可返回表单。但是第二次点击表格行不会做任何事情:你不会去选择器,该行保持突出显示但没有任何反应。如果这是 SwiftUI 错误,是否有已知的解决方法? (我已经需要使用一个小的导航栏标题来解决选择器 UI 错误,否则它的内容会在显示时向上移动 ☹️)
这个问题只是模拟器的一个问题。如果您在物理 iOS 设备上构建应用程序,它就不再成为问题。这就像导航 Link 的那个错误,它只能工作一次。
我在 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)
}
我正在使用 SwiftUI,目前正在使用选择器构建一个表单。
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)
}
}
}
您第一次点击 "Favorite person" 行时,选择器显示正常,点击其中一个姓名可返回表单。但是第二次点击表格行不会做任何事情:你不会去选择器,该行保持突出显示但没有任何反应。如果这是 SwiftUI 错误,是否有已知的解决方法? (我已经需要使用一个小的导航栏标题来解决选择器 UI 错误,否则它的内容会在显示时向上移动 ☹️)
这个问题只是模拟器的一个问题。如果您在物理 iOS 设备上构建应用程序,它就不再成为问题。这就像导航 Link 的那个错误,它只能工作一次。
我在 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)
}