Google+アプリのスライドインメニューみたいなビューをスマートに実現したいなーと思って、あれやるならUITabViewControllerだよなー。でも、UITabBarが出てるのは邪魔だから消したいな。UITabBarのhiddenをYESにしてもUITabBarが消えるだけで消えた部分黒くなるでけだしな。
というところで、2時間ほど検索したり試したりしたのですが、解決しませんでした。いや、それっぽく動いたんですがスマートじゃないのです。UITabBarのsubviewsをfor文で回してプライベートなビューをいじるとか出来ればあまりやりたくない。frameを変えるのもメンテナンスのこと考えるとやりたくない。
で、ドキュメントをうつろな瞳で眺めていたんですが、普通に考えて解決しました。簡単でした。最初から検索せずに普通に考えていれば早かったかも。
ということで、同じように考えている人はいると思うので共有します。ちなみにUIStoryboardを使ってiOS6以上でしか試してません(Xibでもコードでも、iOS2.0以降でもいけると思いますが)。僕の方法を紹介します。
僕の方法
- UITabBarControllerをUIStoryboardに追加する。
- UINavigationControllerをUITabBarControllerのviewControllersに指定する。
- UINavigationControllerのrootViewController(配置直後はUITableViewControllerが指定されている)のHides Bottom Bar on Pushにチェックを入れる
動かしてみてください。これで、UITabBarが消えているはずです。テストのために、UITabBarControllerのviewControllersに2つビューを指定して動かしてみました(Githubにテストプロジェクトをあげています)。ビューの切り替えはコードでやればよいですね。
それぞれ解説します。
1. UITabBarControllerをUIStoryboardに追加する
これは説明いらないですね。
2. UINavigationControllerをUITabBarControllerのviewControllersに指定する
こんな見た目になるはずです。これはUINavigationControllerでpushされた時に、UITabBarを隠すというものなのですが、UINavigationControllerのrootViewControllerに指定しているUIViewControllerで行なってもちゃんと動作するようです。とりあえず1回目のpushが起こっているということなんでしょうね。
ボタンはビューコントローラ間の移動をテストするためにつけたものです。コードとしてはこのようになります。
- (IBAction)buttonTapped:(UIButton *)sender { self.tabBarController.selectedIndex = 1; }
3. UINavigationControllerのrootViewController(配置直後はUITableViewControllerが指定されている)のHides Bottom Bar on Pushにチェックを入れる
これだけです。
Githubにテストプロジェクトをアップしてます。実際のコードはこちらで。
追記
- 参考になったという方は是非アプリをダウンロードして下さいw レビュー募集中です(涙)-> 『駅情報マップ』近くの駅から遠くの駅までいろいろ検索しちゃおう! | Morizotter Blog
- 英語の情報もなかったので英語の記事も書いてみました。 -> Hide UITabBar with standard way | Morizotter Blog