この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
hidesBarsOnTap
iOS 8 から、ナビゲーションバーとツールバーを同時に消去できるメソッドが UINavigationController に追加されました。
- hidesBarsOnSwipe
- hidesBarsOnTap
- hidesBarsWhenKeyboardAppears
- hidesBarsWhenVerticallyCompact
今回は hidesBarsOnTap について説明します。
hidesBarsOnTap は値が true の場合、navigationController の view がタップされるたびに、ナビゲーションバーとツールバーの表示/非表示を切り替えます。
複雑な実装をすることなく、iPhone 標準の「写真」アプリのような表示切り替えが可能となります。
サンプルコード
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.hidesBarsOnTap = true // これだけ
}
また、Storyboard で設定することも可能です。
なお、ステータスバーの表示/非表示をナビゲーションバーと連動させたいときは、以下のメソッドを ViewController でオーバーライドします。
override func prefersStatusBarHidden() -> Bool {
return navigationController!.navigationBarHidden
}
ただし、どういうわけかこのメソッドを実装すると、ナビゲーションバーが非表示になる時のアニメーションがなくなってしまいます。(Slide ではなく None という感じ)
まとめ
なかなか便利なメソッドですが、動きを細かくコントロールできなかったり、挙動が怪しい部分があるので、実戦で使うにはまだ難しいかなと個人的には思いました。
具体的には以下の様な懸念事項が挙げられます。
- view にボタンなどを配置した場合、そのボタンがタップされても表示/非表示を切り替えてしまう
- ステータスバーとナビゲーションバー連動時のアニメーションが不満(上で書いたやつです)
- ツールバーにアイテムがない場合、タップした時にツールバーが非表示にならない
しかし、「こんなメソッドがある」というのは覚えておいて損はないと思います。
これから徐々に挙動や機能が進化することを願っています。