UITabbarを隠すときに困った(気づいた)事
2ヶ月ぶりくらいの日記です。
長い間書かかなかったのは勿体なかったと思いつつ、適度にまた再開していきます。
前に書くといった記事もちょいちょい書いてきます。
(前も同じ事言った様な)
今回はUITabbarを動的に消すときに困った事についてです。
とりあえずいつも通りぐぐってみるとこの方の下の方に貼ってあるリンクに答えがありました。
http://www.developers-life.com/hide-uitabbarcontrolleruitabbar-with-animation.html
UIViewを継承してるからアニメーション使えるのか。寧ろ使えない方が少ないか。
以下はUIViewアニメーション中のUITabbarを動かしている部分です。
for(UIView *view in tabBarController.view.subviews) { CGRect _rect = view.frame; if([view isKindOfClass:[UITabBar class]]) { if (hiddenTabBar) { _rect.origin.y = 431; [view setFrame:_rect]; } else { _rect.origin.y = 480; [view setFrame:_rect]; } } else { if (hiddenTabBar) { _rect.size.height = 431; [view setFrame:_rect]; } else { _rect.size.height = 480; [view setFrame:_rect]; } } }
tabBarControllerの部分は自分の場合はself.tabBarController.view....になってます。
[UITabbar class]だった場合にorigin.yの位置を変えるのは想像通りだったんですが、elseで書かれているheightをかえる処理、よくわかんないしいらないだろーって思って消去してしまったのが 失敗でしたね。先駆者が書いてくれたソースコードはまずは動かしてみて、そこから検証すべきでした。else以下を消したせいで、白い枠だけが残り、数時間無駄にしました。。
このelseの処理はtabbarController.view内にあるUITransitionViewといわれる物でした。
else if ([view isKindOfClass:[UITransitionView class]])でエラーがでて、予測変換すらされないくせにfor内にてNSLog("view=%@",view);とやると表示されるんです、だからelseで書かれてたのかと納得。リファレンス読んだり、詳しく分かったら追記します。
} else { if (hiddenTabBar) { _rect.size.height = 431; [view setFrame:_rect]; } else { _rect.size.height = 480; [view setFrame:_rect]; } }
そのうちAdBannerとかおく際とかにも出てくる問題らしいのでメモ!