2

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 が画面に表示されたままになることを期待しています。

4

0 に答える 0