Я хочу запустить стек навигации в SwiftUI. Таким образом, я хочу запустить второе представление сразу после появления первого представления. Поэтому я хочу использовать @State var, для которого я установил значение true onAppear, и, таким образом, активирует NavigationLink.
Однако подход не работает (без модификаций см. Ниже). Отправка выполняется, а затем сразу же закрывается второе представление (видео ). Это мой образец (Github Repo):
struct SecondView: View {
var body: some View {
Text("Second")
.navigationTitle("Second")
.onAppear(perform: {
print("Second: onAppear")
})
}
}
struct FirstView: View {
@State var linkActive = false
var body: some View {
NavigationLink(destination: SecondView(), isActive: $linkActive) {
Text("Goto second")
}
.navigationTitle("First")
.onAppear(perform: {
print("First: onAppear")
linkActive = true
})
.onChange(of: linkActive) { value in
print("First: linkActive changed to: \(linkActive)")
}
}
}
struct SwiftUIView: View {
var body: some View {
NavigationView {
NavigationLink(destination: FirstView()) {
Text("Goto first")
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
Выход:
First: onAppear
First: linkActive changed to: true
Second: onAppear
First: linkActive changed to: false
Если я изменю onAppear, чтобы установить для linkActive значение true после задержки мин. 0,5 секунды работает. Что здесь не так? Я ожидаю, что SecondView останется на экране, так как я не понимаю, почему isActive снова меняется на false.
SecondView
. - person drootang   schedule 28.12.2020