SwiftUI でナビゲーション スタックを初期化したい。したがって、最初のビューが表示された直後に 2 番目のビューをプッシュしたいと考えています。したがって、onAppear を true に設定して、NavigationLink をアクティブにする @State 変数を使用したいと考えています。
ただし、このアプローチは機能していません (変更なし、以下を参照)。プッシュが完了すると、2 番目のビューがすぐに閉じられます (ビデオ)。これは私のサンプルです(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 を変更して、min の遅延後に linkActive を true に設定するとします。0.5秒で動作します。ここで何が問題なのですか?isActive が false に戻される理由がわからないため、SecondView が画面に表示されたままになることを期待しています。