クリックできる目次
はじめに
iPhone13が出る狭間でアプリ開発をしていました。
開発をしている途中はなるべくリリースまでXcodeのバージョンを上げたくはなかったのですが、iOS15系の端末で実行すると、UINavigationBarの背景色のデザインがiOS14系と異なることに気がつきました。既に書かれた内容かもしれませんが、自分用のメモとして書き残しておきたいと思います。よろしくお願いします。
動作環境について
- Xcode Version 13.0
- Swift 5.5
ちなみにXcode13.0だと以下の画像のように、StoryBoardで色を指定しても色が変わりません。
解決方法
もともとLarge Titleでのみに反映されていたScroll Edge Appearanceが全てのUINavaigationBarに適応されたのが原因の模様。
なので、iOS15もiOS14以下のバージョンもアプリで対応する場合は、Standard Appearance
とScroll Edge Appearance
の両方に同じデザインの指定を書けば良さそうです。
StoryBoardで変更する
STEP.1
Appearancesを2箇所チェック

STEP.2
Standard Appearanceを設定する

STEP.3
Scroll Edge Appearanceを設定する

これで、Xcode13.0のStoryBoardでも色がちゃんと反映されるようになります。
コードで変更する
NavigationContorllerを親に持つViewControllerのviewDidLoad()
等に以下のコード記述しました。
1 2 3 4 5 6 7 8 9 10 |
if #available(iOS 15.0, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() // NavigationBarの背景色の設定 appearance.backgroundColor = UIColor.systemGreen // NavigationBarのタイトルの文字色の設定 appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] self.navigationController?.navigationBar.standardAppearance = appearance self.navigationController?.navigationBar.scrollEdgeAppearance = appearance } |
さいごに
Xcode12で開発を進めていたのですが、このタイミングでiPhone13の発表があってXcodeを仕方なく上げました…
UIが結構変わっているし、しかもNavigationBarを触っていると結構落ちるし。困ったー!
いつもの。
見ていただいてありがとうございます。