[UIKit] ログイン済み状態でアプリを起動するとナビゲーションバーが表示されない時の対処方法
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
こんにちは、あきお(@akio0911)です。
ログイン機能があるアプリを作った時、ログイン済み状態でアプリを起動した時だけUINavigationBar(ナビゲーションバー)が表示されなくなることがあったりします。
今回はその時の原因と対処法について解説したいと思います。
こんな画面構成を作ってみました。未ログイン状態ではA画面から始まり、ログイン状態ではB画面から始まって欲しいという構成ですね。
SceneDelegateのscene(_:willConnectTo:options:)メソッドにはこんな処理を書いておきます。未ログイン状態ではInitialViewController(矢印がついている画面)から始まり、ログイン状態ではViewControllerBから始まるという形です。
まずはisLogin = falseの状態で起動してみます。A画面から始まり、UINavigationBarも表示されています。
次はisLogin = trueの状態で起動してみました。B画面から始まりましたが、UINavigationBarが表示されていません。
StoryboardではB画面にもナビゲーションバーが表示されてるのになぜ!?って感じですよね。
先ほどのコードをよく見てみましょう。未ログイン状態ではInitialViewController(矢印がついている画面)をrootViewControllerにし、ログイン状態ではViewControllerBをrootViewControllerにしています。
つまりこういう動きになるということですね。
そして、Storyboard上で先頭にUINavigationControllerが設置されていると、Storyboard上での設計時においては後続の画面でナビゲーションバーがプレビューとして表示されてしまうのです。
しかし実際のアプリ動作時に途中から表示を始める場合、UINavigationControllerが先頭にないのでナビゲーションバーが表示されなくなってしまいます。
試しにA画面からB画面へのセグエを削除してみました。B画面から見て画面連鎖の先頭にUINavigationControllerが存在しなくなるので、B画面にはナビゲーションバーが表示されなくなります。今回のアプリ動作はこの状態だということになります。
さて、ではどうしたら良いのかというと、いくつか方法はありますが例えばコード上でB画面を表示する際に間にUINavigationControllerを挟み込んであげるという方法があります。
これで無事、ログイン済み状態でもナビゲーションバーが表示されるようになりました。
関連動画
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!