私は、あるビューから別のビューへの単純な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
Xcodeを11.2にアップデートしたところ、本日この問題に遭遇しました。 この投稿 によると、13.2のバグのようです。 13.1.2を実行している実際のiPhone Xでテストしたところ、問題なく動作しました。