頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


タブバーを隠す方法

iPhone画面の下側にあるtabBarの表示・非表示をコントロールしようとしてえらくはまったのでメモ。

通常、消す必要もないんだけど画面を大きく使いたいことってあるじゃないですか。
navigationController にプッシュして次の画面を表示し、その画面だけでtabBarを消すっていうなら
newViewController.hidesBottomBarWhenPushed = YES;
でOKなんですが、この方法が使えない場合。

たとえば、一番いい例がクックパッドアプリのメニューを見る時。
これ、よくできてるんですよ。

タブバーを隠す1

↑これはレシピを選択した画面。
レシピをさらに見ようと画面をドラッグさせると、あら不思議。

タブバーを隠す2

↑navigationBar もtabBarも消えてしまいました!
アニメですーっと画面外へ移動する感じです。
こうなると、画面いっぱいにレシピが表示されて見やすいのですよ。
画面にタッチしたりすると再表示する(これもアニメで画面内に入ってくる)、という素晴らしいUI。

こういうviewが表示された後にtabBarの表示・非表示を切り替えたい場合だと、上記の方法は使えません。
では、どうするか、、、?
これがえらくはまったんです、ホント。

なぜはまったかというと、、、
あるクラス内で、
self.tabBarController.tabBar.hidden=YES;
なんてすると、こうなるんです。

タブバーを隠す3
タブバーを隠す4



↑tabBarのあったところが真っ黒に(設定によっては他の色かもしれません)。
こちらの意図としては、tabBarが隠れたのなら、その下にあるテーブルなり画像なりを表示して欲しいわけです。

ちなみに上記の
self.tabBarController.tabBar.hidden=YES;
の~.tabBarはUIViewを継承するUITabBarクラスのオブジェクトなので、hiddenじゃなくてアニメっぽくframe.centerをごにょごにょやると位置を変えてやることもできるのですが、これもどう頑張ってももとtabBarのあったところに何も表示してくれません。

いろいろframeの値を調べたり、view.autoresizingMaskを設定するとかとにかく手当たり次第にやってみたのですが、解決できず、、、
クックパッドのアプリで目にしていなければあきらめていたかと思いますが、何か方法があるんだろうとネットをあさり続けたところ、ようやく以下のページに。

Hide UITabBarController/UITabBar with animation. - Notes of a Developer
↑リンク切れのため外しました(2016/10/8)

結論からいうと、このページにある通りで動いてくれました。
ただし、tabBarControllerにアクセスしていますが、あるViewControllerクラス内でself.tabBarControllerからアクセスすると動いてくれませんでした(なんでじゃー?)。

結局、元々のUITabBarContorllerのオブジェクトを置いてるところ(例えばFooAppDelegate)にメソッドをこさえて、そこから直接tabBarControllerにアクセスすると、めでたく動いてくれました。

ふー、長い道のりだったよ、全く。

<< Xcode3.2.4 and iOS SDK 4.1をダウンロードした  TopPage  プロパティ設定のためだけにサブクラスを作るのが面倒だ! >>

コメント

タブバーを消さない方法

お世話になります。

Xcode3.2.5
iOS SDK 4.2
で開発しています。

>通常、消す必要もないんだけど画面を大きく使いたいことってあるじゃないですか。
>navigationController にプッシュして次の画面を表示し、その画面だけでtabBarを消すっていうなら
>newViewController.hidesBottomBarWhenPushed = YES;
>でOKなんですが、この方法が使えない場合。

とありますが、タブバーを消さないようにするにはどうすればいいでしょうか。
hideBottomBarWhenPushed=NOにしても
動きが変わりません。

すいませんが教えてください
よろしくお願いします。

2011.03.25   COOK2   編集

Re: タブバーを消さない方法

> navigationController にプッシュして次の画面を表示

この方法ならタブバーは表示されたままだと思いますが?

2011.03.26   たつや   編集

Re:

はじめまして、いつも参考にさせていただいております。

私もこの方法を取り入れたいと思っているのですが、
うまく実現できません。


>結局、元々のUITabBarContorllerのオブジェクトを置いてるところ(例えばFooAppDelegate)にメソッドをこさえて、そこから直接tabBarControllerにアクセスすると、めでたく動いてくれました。

大変お手数ですが、もう少し細かくお教えいただけないでしょうか?

どうぞよろしくお願いします。

2011.04.06   medaca   編集

>medacaさん
私は実装できたので、私のとった方法でよければシェアします。
元々のUITabBarContorllerのオブジェクトを置いてるところ(例えばFooAppDelegate)の実装部分に上記リンク先のメソッドである、hidetabbarをコピペします。

BOOL hiddenTabBar;
UITabBarController *tabBarController;
この二つは宣言部分、@interfaceのインスタンス変数のところにコピペしました。

後はこのメソッドを呼びだす必要があるのですが、それには以下のpdfに記載してある内容を参考にしました。
ttp://ylb.jp/iOSDev/SingletonSample.pdf

具体的には、上記リンク内のsharedManagerメソッドをhidetabbarメソッドと同じところにコピペして、始めに呼び出しているtabbarcontrollerとhidetabbar内のtabbarcontrollerが同じポインターとなるように調節して下さい。(staticとか使って)

最終的には
AppDelegate *doro = [AppDelegate sharedManager];
[doro hidetabbar];
のような形で呼び出しました。

2011.04.25   どろけい   編集

リンク先が悪意のあるページにリダイレクトされます

2015.09.28      編集

タブバーについて知りたいが

リンクがウィルスサイトにつながってますよ

2016.10.06   タブバー   編集

Re: タブバーについて知りたいが

> リンクがウィルスサイトにつながってますよ

ありがとうございました。修正しました。

2016.10.08   たつや   編集


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/443-8dcc1020




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad