[UIKit] ログイン済み状態でアプリを起動するとナビゲーションバーが表示されない時の対処方法

公開日: : 最終更新日:2020/07/13 iOSアプリ開発

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

UntitledImage

こんにちは、あきお(@akio0911)です。

ログイン機能があるアプリを作った時、ログイン済み状態でアプリを起動した時だけUINavigationBar(ナビゲーションバー)が表示されなくなることがあったりします。

今回はその時の原因と対処法について解説したいと思います。

UntitledImage

こんな画面構成を作ってみました。未ログイン状態ではA画面から始まり、ログイン状態ではB画面から始まって欲しいという構成ですね。

SceneDelegateのscene(_:willConnectTo:options:)メソッドにはこんな処理を書いておきます。未ログイン状態ではInitialViewController(矢印がついている画面)から始まり、ログイン状態ではViewControllerBから始まるという形です。

UntitledImage

まずはisLogin = falseの状態で起動してみます。A画面から始まり、UINavigationBarも表示されています。

UntitledImage

次はisLogin = trueの状態で起動してみました。B画面から始まりましたが、UINavigationBarが表示されていません。

UntitledImage

StoryboardではB画面にもナビゲーションバーが表示されてるのになぜ!?って感じですよね。

先ほどのコードをよく見てみましょう。未ログイン状態ではInitialViewController(矢印がついている画面)をrootViewControllerにし、ログイン状態ではViewControllerBをrootViewControllerにしています。

UntitledImage

つまりこういう動きになるということですね。

そして、Storyboard上で先頭にUINavigationControllerが設置されていると、Storyboard上での設計時においては後続の画面でナビゲーションバーがプレビューとして表示されてしまうのです。

しかし実際のアプリ動作時に途中から表示を始める場合、UINavigationControllerが先頭にないのでナビゲーションバーが表示されなくなってしまいます。

UntitledImage

試しにA画面からB画面へのセグエを削除してみました。B画面から見て画面連鎖の先頭にUINavigationControllerが存在しなくなるので、B画面にはナビゲーションバーが表示されなくなります。今回のアプリ動作はこの状態だということになります。

さて、ではどうしたら良いのかというと、いくつか方法はありますが例えばコード上でB画面を表示する際に間にUINavigationControllerを挟み込んであげるという方法があります。

UntitledImage

これで無事、ログイン済み状態でもナビゲーションバーが表示されるようになりました。

関連動画

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑