概要
NavigationViewやNavigationStackのタイトルや背景色を変更する方法をご紹介します。
環境
この記事は以下のバージョン環境のもと作成されたものです。
【Xcode】14.1
【iOS】16.1
【macOS】Monterey バージョン 12.6
実装方法
UINavigationBarAppearanceはナビゲーションバーの外観をカスタマイズするためのオブジェクトです。
https://developer.apple.com/documentation/uikit/uinavigationbarappearance
そのUINavigationBarAppearanceを使用する事でSwiftUIのNavigationViewやNavigationStackでのタイトルや背景色を変更することができます。
サンプルコードは以下の通りです。
struct MySwiftUIView: View { init() { let navigationBarAppearance = UINavigationBarAppearance() navigationBarAppearance.configureWithOpaqueBackground() navigationBarAppearance.backgroundColor = UIColor.orange navigationBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.blue, .font : UIFont.systemFont(ofSize: 40)] navigationBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white, .font : UIFont.systemFont(ofSize: 40, weight: .bold)] UINavigationBar.appearance().standardAppearance = navigationBarAppearance UINavigationBar.appearance().scrollEdgeAppearance = navigationBarAppearance UINavigationBar.appearance().compactAppearance = navigationBarAppearance } var body: some View { NavigationStack { Text("NavigationStack内の画面") .navigationTitle("test") .navigationBarTitleDisplayMode(.inline) } } }
サンプルコードの各解説は以下の通りです。
コード | 説明 |
---|---|
configureWithOpaqueBackground | このメソッドを呼び出すと、以前の値がリセットされる。 |
backgroundColor | 背景色の変更。 |
titleTextAttributes | navigationBarTitleDisplayModeがinline時のフォント色及びサイズの変更。 |
largeTitleTextAttributes | navigationBarTitleDisplayModeがLarge及びautomatic時のフォント色及びサイズの変更。 |
appearance().standardAppearance | 標準の高さのナビゲーションバーの外観設定。 |
appearance().scrollEdgeAppearance | スクロール可能なコンテンツの端がナビゲーションバーの端に揃うときのナビゲーションバーの外観設定。 NavigationViewやNavigationStackで使用する際はscrollEdgeAppearanceに必ず反映させる必要があります。 |
appearance().compactAppearance | コンパクトな高さのナビゲーションバーの外観設定。 |
これでタイトルや背景色を変更する事ができます。
まとめ
UINavigationBarAppearanceを使用する事でNavigationView及びNavigationStackのタイトルや背景色を変更する方法の紹介でした。 また公式よりサンプルコードも提供されているので、より深く知りたい方はご参照ください。