web-dev-qa-db-ja.com

SwiftUIナビゲーションバーボタンを表示して戻るシンプルなナビゲーションを実行できない

私は、あるビューから別のビューへの単純なSwiftUIナビゲーションを実行し、バーボタン項目を使用して戻ります。新しいビューを呼び出すために3つの異なるアプローチを試しました。本文ビューでボタンを使用すると機能しますが、ナビゲーションバーでNavigationBarItemsを使用すると、2つの異なる方法で失敗します。

これが開始ビューです:

struct ContentView: View {
    @State private var showSecondView = false
    var body: some View {
        NavigationView {
            VStack {
                Text("This is the content view")
                    .navigationBarTitle("Nav Title")
//this works ONCE only:
                    .navigationBarItems(trailing: Button(action: {self.showSecondView.toggle()}) {
                        Text("SecondView")
                    })
//this always fails on return to contentview with error:
//Tried to pop to a view controller that doesn't exist
//                .navigationBarItems(trailing:
//                    NavigationLink(destination: SecondView()) {
//                        Text("SecondNav")
//                    }
//                )
//This always works:
                Button(action: {self.showSecondView.toggle()} ) {
                    Text("Call Modal Second View")
                }.padding()
                Text(self.showSecondView ? "true" : "false")
            }.sheet(isPresented: $showSecondView) {
                SecondView()
            }
        }
    }
}

NavigationBarItemsでNavigationLinkを使用すると、SecondViewが表示されますが、ContentViewに戻ると、「存在しないビューコントローラにポップしようとしました」というエラーでクラッシュします。

NavigationBarItemsでボタンを使用すると、SecondViewへの遷移が1回だけ機能します。 ContentViewに戻ることはできますが、ボタンは機能しなくなります。興味深いことに、最初に実行されたアクションが本体のボタンである場合、NavigationBarItemは一度も機能しません。

そして、シンプルなSecondView:

struct SecondView: View {
    @Environment(\.presentationMode) var presentation
    var body: some View {
        NavigationView {
            VStack{
                Text("This is the second view")
                Button(action: { self.presentation.wrappedValue.dismiss()}) {
                    Text("Dismiss Modal")
                }.padding()
            }
        }
    }
}

よくわかりません。どんなガイダンスもいただければ幸いです。 Xcode 11.2(11B44)、Catalina 10.15

6
user2698617

Xcodeを11.2にアップデートしたところ、本日この問題に遭遇しました。 この投稿 によると、13.2のバグのようです。 13.1.2を実行している実際のiPhone Xでテストしたところ、問題なく動作しました。

1
machinehead115