酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

SwiftでUINavigationControllerのナビゲーションバーを表示/非表示を動的に切り替える

UINavigationControllerのナビゲーションバーを表示/非表示を動的に切り替える方法としては、UINavigationController#setNavigationBarHiddenメソッドを使います。

// ナビバーの表示を切り替える
if let nv = navigationController {
    let hidden = !nv.navigationBarHidden
    nv.setNavigationBarHidden(hidden, animated: true)
}

下図ではナビゲーションバーにはアプリ名と設定ボタンが表示されています。

f:id:ch3cooh393:20160117172921p:plain

前述のUINavigationController#setNavigationBarHiddenメソッドを使うことでナビゲージョンバーを非表示にすることができます。

f:id:ch3cooh393:20160117172933p:plain

実行してみるとナビゲーションバーはうまく消えましたが、ステータスバーの部分が真っ白になってしまいました!

ステータスバーの背景色が真っ白になってしまっている

これは背面にいるViewControllerの背景色が白いためです。このアプリでは、背面から前面にかけて下記のような作りになっています。

  • UIWindow
    • UINavigationController
      • HomeViewController
        • FriendViewController

背面にあるHomeViewControllerの背景色が表示されていますので、下記のようにview.backgroundColorに適当な色を設定します。

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = UIColor.purpleColor()

    // 省略...
}

実行すると下図のようにステータスバーに背景色がつきます。

f:id:ch3cooh393:20160117222432p:plain

ここでは単色を設定していますが、親となるViewControllerに画像を追加しているアプリもあるようです。