SwiftUIでNavigationStackを使っているとNavigation BarやBackボタンが隠せない? (そんなことなかった)
追記
NavigationViewで一度動くコード作ってからNavigationStackに戻してみたらうまく動いて、期待通りに遷移先でBackボタンがない状態が作れた。
NavigationStack(path: $path) { SplashView() .navigationDestination(for: SigninState.self) { state in Group { switch state { case .notsignedin: SigninView() case .signedin: MainView() } } .navigationBarBackButtonHidden(true) } }
この遷移先に.navigationBarBackButtonHidden
をつける方法も試したと思ってたんだけど、たぶん何かでミスってたんだと思う。単に自分のミスだったのかな、ということで、解決しました。
以下オリジナル
タイトルに書いたままなんだけど。 iOSアプリの作り直しをやってて、まあiOS16以降のみ対応でもいいかなと思ったのでビュー遷移に最初からNavigationStackを使おうと思ったんだけど、ユーザに勝手に戻ってほしくない遷移があるのでBackボタンを隠そうと思って以下のようなコードを書いた。
NavigationStack(path: $path) { SplashView() .navigationBarTitleDisplayMode(.automatic) .navigationBarBackButtonHidden(true) .navigationDestination(for: SigninState.self) { state in Group { switch state { case .notsignedin: SigninView() case .signedin: MainView() } } } } }
んだけど、navigationBarBackButtonHidden(true)
はドキュメントにもある通り、どうもNavigationView内でしか効かないみたい。NavigationStackといっしょに指定してもやっぱり遷移先でBackボタンが表示されてしまう。
SwiftUI慣れてないから修飾するビューが違うのかな、と思ってGroup{ ... }
の部分に指定してもやっぱりダメ。
あとドキュメントをあれこれ見てると.toolbar
で指定しろってあるものもあるので .toolbar(.hidden, for: .navigationBar)
を指定してみたりもしたんだけど、やっぱりダメ。なぜだ。現状ナビゲーションバーを隠したりBackボタンを非表示にしたりする方法がないのかな。
なんもわからんのでDeveloper Forumに質問を投げておいた。投げる前に同じ問題が投稿されてなさそうなのはいちおう見てる。
How can I hide navigation bars (or… | Apple Developer Forums