Navigation BarとTab Barを非表示にする

きっとまた悩むのでメモ

やりたかったこと

一部の画面のみNavigationBarやTabBarを非表示にしたい

問題点

Storyborard上のSimulated Metricsで以下のようにTop BarとBottom BarをNoneに設定すると、Storyboard上ではバーが消えるのに実行すると消えない

f:id:marikooota:20171127221344p:plain

原因

Storyborard上のSimulated Metricsは

あくまでStoryBoard上でのレイアウトを助けるもので、実行時には無視される

らしい😱
Xcode4.6のSimulated Metricsについてメモ。 - Object for cutie

解決法:NavigationBarを非表示にする

   override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

解決法:TabBarを非表示にする

ViewControllerのLayoutにあるHide Button Bar on Pushにチェックを入れる

f:id:marikooota:20171127222134p:plain

おまけ

ToolBarを非表示にしたいときは、上記のviewWillAppearとviewWillDisappearに以下を記述する

// viewWillAppear
self.navigationController?.setToolbarHidden(true, animated: animated)

// viewWillDisappear
self.navigationController?.setToolbarHidden(false, animated: animated)