segueでのpush移動時にTabbarを消す - ReDo

2013年3月31日

segueでのpush移動時にTabbarを消す

Tab Bar ControllerにNavigation Controllerを載せたところ、画面下部にTab Barが居座ってる幅がちょっと邪魔だったので、特定の画面に移動時に消したいと考えました。

【結論】prepareForSegueでsegue.destinationViewControllerにhidesBottomBarWhenPushed = YESを設定する

いくつかぐぐって試して動いたのはこちら。

Iphone: Is it possible to hide the TabBar?
http://stackoverflow.com/questions/1982172/iphone-is-it-possible-to-hide-the-tabbar

showTabBarの最後にcontent.frame = contentFrame;みたいにCGRectを書き戻してやるのが抜けてるので
足さないと再表示後のTab content Viewの高さがおかしいことになります。以下、足した当該コード。

  
- (void)hideTabBar {
    if (!isTabBarHidden) {
        UITabBar *tabBar = self.tabBarController.tabBar;
        UIView *parent = tabBar.superview; // UILayoutContainerView
        UIView *content = [parent.subviews objectAtIndex:0];  // UITransitionView
        UIView *window = parent.superview;
        
        [UIView animateWithDuration:0.4
                         animations:^{
                             CGRect tabFrame = tabBar.frame;
                             tabFrame.origin.y = CGRectGetMaxY(window.bounds);
                             tabBar.frame = tabFrame;
                             content.frame = window.bounds;
                         }];
        isTabBarHidden = YES;
    }
}
    
- (void)showTabBar {
    if (isTabBarHidden) {
        UITabBar *tabBar = self.tabBarController.tabBar;
        UIView *parent = tabBar.superview; // UILayoutContainerView
        UIView *content = [parent.subviews objectAtIndex:0];  // UITransitionView
        UIView *window = parent.superview;
        
        [UIView animateWithDuration:0.4
                         animations:^{
                             CGRect tabFrame = tabBar.frame;
                             tabFrame.origin.y = CGRectGetMaxY(window.bounds) - CGRectGetHeight(tabBar.frame);
                             tabBar.frame = tabFrame;
                             
                             CGRect contentFrame = content.frame;
                             contentFrame.size.height -= tabFrame.size.height;
                             content.frame = contentFrame;
                         }];
        isTabBarHidden = NO;
    }
}

しかしそのコメント欄にhidesBottomBarWhenPushedってのがありまして、これがそもそも「pushで画面遷移してきたらBottom Barを隠す」ってそのまんまっぽい。

segue経由での移動時には移動元のprepareForSegureで以下の様にすると良いみたいです。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController *dvc = (UIViewController *)[segue destinationViewController];
   dvc.hidesBottomBarWhenPushed = YES;
}

アニメーションのあるなしがあって少し見た目が違うんですが特にこだわりがなければ後者がいい気がします。

【ついでに:Tab Bar用30x30 @2xの60x60アイコンセット】
GraphicsFuel.com | 45 iOS Tab Bar Icons (PSD & PNG)
http://www.graphicsfuel.com/2013/01/45-ios-tab-bar-icons-psd-png/#data

>License: Royalty-free, Free for personal and commercial use
ありがてぇありがてぇ

コメントする