请问有人知道以下崩溃的解决方法吗?
我有一个表单,通过NavigationLink在父级导航控制器中显示,如下所示:
var body: some View {
NavigationView {
NavigationLink(destination: PickerView()) {
Text("Picker View")
}
}
}
PickerView有三个选择器。第一个选择器决定显示其他两个中的哪一个:
struct PickerView: View {
@State var sectionValue = "pet"
@State var petValue = "dog"
@State var fruitValue = "apple"
@State var foodValue = "pasta"
var body: some View {
Form {
Picker(selection: $sectionValue, label: Text("What is your favorite?")) {
Text("Pet").tag("pet")
Text("Fruits").tag("fruits")
Text("Foods").tag("foods")
}
if (sectionValue == "pet") {
Picker(selection: $petValue, label: Text("Favorite pet")) {
Text("Dog").tag("dog")
Text("Cat").tag("cat")
Text("Lizard").tag("lizard")
}
} else if (sectionValue == "fruits") {
Picker(selection: $fruitValue, label: Text("Favorite fruit")) {
Text("Apple").tag("apple")
Text("Pear").tag("pear")
Text("Orange").tag("orange")
}
} else if (sectionValue == "foods") {
Picker(selection: $foodValue, label: Text("Favorite food")) {
Text("Pasta").tag("pasta")
Text("Ice Cream").tag("ice_cream")
Text("Bacon").tag("bacon")
}
}
}
}
}
在iOS 13.3模拟器(和设备)中,我看到以下行为:导航到PickerView并选择第一个选择器的替代值将隐藏第2个选择器并显示第3个选择器,如预期所示。但是,如果您操作第三个选择器,则会显示空白值...然后很快崩溃。崩溃显示了数百个调用[UINavigationController _navigationBar:itemEnabledAutoScrollTransition:]的堆栈跟踪。我认为这是Apple的错误。我已经提交了FB7534235,但我想知道是否有任何解决方法或建议?一种选择是使用.disabled()来禁用(而不是隐藏)选择器,但这会导致更令人困惑的用户界面。附带说明:这似乎是与NavgiationView()/NagivationLink()和Picker()的交互作用有关--因为如果您注释掉NagivationLink并直接在NavigationView中呈现PickerView,一切都按预期工作,没有任何崩溃。更新:示例案例已更新为子选择器的3种选择方式。感谢@krjw指出,在两种选择的情况下,使用"else if"而不是两个单独的if语句可以产生所需的行为,而不会发生崩溃...尽管我仍然不确定为什么(除非是一个错误)。