Tab Bar ControllerとNavigation Controllerの組み合わせ

iPhoneのアプリにはTab Bar ControllerとNavigation Controllerを組み合わせたものがよくある。例えばiPodアプリ(iPod touchだと名前が違った気がするけどとにかく標準の音楽再生アプリ)。あれは起動すると、下に「プレイリスト」「アーティスト」とかTabが並んでる。で、そのTabのなかでリストをブラウズするのにはNavigation Controllerを使ってる。こういうインターフェースを作るには、Tab Bar Controllerの各TabにNavigation Controllerを入れればいい。

けど、iPodアプリでちょっとデフォルトと違うのは、いざ曲を再生するときにはこのTabがすっと横に飛んで行く。まるでNavigation Controllerの中に入ってるように。これってどうやってやってるんだろう、自分のアプリでも使いたいなと思ってTab Bar Controllerのリファレンスを見ていたけど、そもそもTabの表示/非表示を切り替えるメソッドやプロパティもない。これはTabBarの表示やアニメーションも自分でいちいちやらなきゃいけないのか?と思いかけた。
こういうときはGoogleに聞く。「UITabBarController Hide Tab bar」とか適当に。
で、答えが分かった。実に簡単なことだった。
UIViewControllerにhidesBottomBarWhenPushedというそのものズバリのプロパティがある。これをYESにしてからNavigation ControllerにPushしてやる。するとTab Barもいっしょにすっと横に飛んで行く。とても簡単。
*1
このView ControllerのときはTab Barは表示しない、と決まっているなら、initのときにもうYESにすればOK。

…って日本語ドキュメントにも書いてあった。
http://developer.apple.com/jp/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/CombiningToolbarandNavigationControllers/chapter_9_section_1.html

*1:画面は開発中のものです