У кого-нибудь есть обходной путь для следующего cra sh?
У меня есть форма, которая отображается через 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-й сборщик, как и ожидалось. Однако если вы работаете с третьим средством выбора, оно будет отображаться с пустыми значениями ... вскоре за ним будет отображаться cra sh.
cra sh показывает трассировку стека с сотнями вызовов [UINavigationController _navigationBar: itemEnabledAutoScrollTransition:]
Я думаю, что это ошибка Apple. Я подал FB7534235, но я хотел посмотреть, есть ли у кого-нибудь обходные пути или предложения?
Одним из вариантов является использование .disabled () для отключения (а не скрытия) средства выбора, но это приводит к более запутанному пользовательскому интерфейсу.
Примечание : Похоже, что это взаимодействие с NavgiationView () / NagivationLink () и Picker () - потому что если вы закомментируете NagivationLink и визуализируете PickerView непосредственно в NavigationView, все работает, как и ожидалось, без сбоев.
update : пример обновления обновлен, чтобы сделать его трехсторонним выбором для вспомогательных сборщиков. Благодаря @krjw, приведенному ниже, указывается, что в двустороннем случае вместо двух отдельных используется "else if" if-операторы могут привести к желаемому поведению без cra * sh ... хотя я до сих пор не уверен, почему (если это не просто ошибка)