UITabBarを標準の方法で隠す

UITabBarを標準の方法で隠すGoogle+アプリのスライドインメニューみたいなビューをスマートに実現したいなーと思って、あれやるならUITabViewControllerだよなー。でも、UITabBarが出てるのは邪魔だから消したいな。UITabBarのhiddenをYESにしてもUITabBarが消えるだけで消えた部分黒くなるでけだしな。

というところで、2時間ほど検索したり試したりしたのですが、解決しませんでした。いや、それっぽく動いたんですがスマートじゃないのです。UITabBarのsubviewsをfor文で回してプライベートなビューをいじるとか出来ればあまりやりたくない。frameを変えるのもメンテナンスのこと考えるとやりたくない。

で、ドキュメントをうつろな瞳で眺めていたんですが、普通に考えて解決しました。簡単でした。最初から検索せずに普通に考えていれば早かったかも。

ということで、同じように考えている人はいると思うので共有します。ちなみにUIStoryboardを使ってiOS6以上でしか試してません(Xibでもコードでも、iOS2.0以降でもいけると思いますが)。僕の方法を紹介します。

僕の方法

  1. UITabBarControllerをUIStoryboardに追加する。
  2. UINavigationControllerをUITabBarControllerのviewControllersに指定する。
  3. UINavigationControllerのrootViewController(配置直後はUITableViewControllerが指定されている)のHides Bottom Bar on Pushにチェックを入れる

動かしてみてください。これで、UITabBarが消えているはずです。テストのために、UITabBarControllerのviewControllersに2つビューを指定して動かしてみました(Githubにテストプロジェクトをあげています)。ビューの切り替えはコードでやればよいですね。

それぞれ解説します。

1. UITabBarControllerをUIStoryboardに追加する

これは説明いらないですね。

2. UINavigationControllerをUITabBarControllerのviewControllersに指定する

Storyboard

こんな見た目になるはずです。これは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にチェックを入れる

Property

これだけです。

Githubにテストプロジェクトをアップしてます。実際のコードはこちらで。

追記

Pocket
LINEで送る

You may also like...