How to hide UITabBar?

23,411

Solution 1

You have to use set the hidesBottomBarWhenPushed property to YES on the controller that you are pushing and NOT to the UITabBarController.

otherController.hidesBottomBarWhenPushed = YES;
[navigationController pushViewController: otherController animated: TRUE];

Or you can set the property when you first initialize the controller you want to push.

Solution 2

Interface builder has checkbox for view controller embedded in tab bar - Hides bottom bar on push. In easy cases no need to do it through code now.

For @Micah

Hide bottom bar on push.

Solution 3

I too struggled with this for a while. Hiding the tab bar is one step in the right direction, but leaves a black rectangle behind. The trick is to resize the layer that backs the UIViewController's view.

I have written a small demo here with a solution:

https://github.com/tciuro/FullScreenWithTabBar

I hope this helps!

Solution 4

Don't use this solution!

BOOL hiddenTabBar;
UITabBarController *tabBarController;

- (void) hideTabBar {

     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0.4];
     for(UIView *view in tabBarController.view.subviews)
     {
          CGRect _rect = view.frame;
          if([view isKindOfClass:[UITabBar class]])
          {
               if (hiddenTabBar) {
                    _rect.origin.y = [[UIScreen mainScreen] bounds].size.height-49;
                    [view setFrame:_rect];
               } else {
                    _rect.origin.y = [[UIScreen mainScreen] bounds].size.height;
                    [view setFrame:_rect];
               }
          } else {
               if (hiddenTabBar) {
                    _rect.size.height = [[UIScreen mainScreen] bounds].size.height-49;
                    [view setFrame:_rect];
               } else {
                    _rect.size.height = [[UIScreen mainScreen] bounds].size.height;
                    [view setFrame:_rect];
               }
          }
     }    
     [UIView commitAnimations];

     hiddenTabBar = !hiddenTabBar;
}

Source

Share:
23,411
Ilya Suzdalnitski
Author by

Ilya Suzdalnitski

Full-stack engineer with a focus on delivering reliable and maintainable software. I have a strong preference for functional programming and believe that it is the most important aspect of producing quality software. Passionate about continuous improvement, and always eager to learn and apply new technology.

Updated on January 14, 2021

Comments

  • Ilya Suzdalnitski
    Ilya Suzdalnitski over 3 years

    In my app I have a tab bar. And in some views I as well have a toolbar. So when I come to those views with a toolbar it looks ugly - two bars at the bottom of the view. I thought that it would be a best solution to hide a tab bar when entering those particular views. But I just couldn't figure out how to do it in a right way. I tried to set UITabBarController's tabBar hidden property to YES, but it didn't work. And I as well tried to do the following thing in whatever view I am:

    self.hidesBottomBarWhenPushed = YES;
    

    But it didn't work as well.

    What is the right solution to this situation? I don't want to have 2 bars at any view.

  • JoJo
    JoJo over 12 years
    I have three view controllers that the UITabBarController can present. On the second view controller, I put self.hidesBottomBarWhenPushed = YES in initWithNibName:bundle:. When I tested tapping into the second view controller, the UITabBar was still there.
  • Uygar Y
    Uygar Y over 10 years
    Using a custom tab bar (ALTabBar). This one worked for me. Instead to support 4" screen, I have changed 480 to [[UIScreen mainScreen] bounds] -> size.height
  • ryan0
    ryan0 over 10 years
    Awesome tip, wish I could upvote more. I didn't even know there WAS a layer backing the UIViewController!
  • Adam
    Adam over 10 years
    Tried on a new project with ios7 - no effect
  • Adam
    Adam over 10 years
    This worked for me on ios7 where setting same value in code didnt
  • Micah
    Micah over 10 years
    Where is this checkbox?
  • SmileBot
    SmileBot almost 10 years
    Do this on the destination view controller, not the source!
  • orafaelreis
    orafaelreis over 9 years
    great, but... try not use fixed values like 431 or 480. You should always write code to run in any screen size!
  • orafaelreis
    orafaelreis over 9 years
    If you want really resize the view (not only hide tabBar) set self.tabBarController.tabBar.hidden = hiddenTabBar;
  • manonthemoon
    manonthemoon almost 8 years
    When I go back to the screen, I have a black space on top of the tab bar.
  • guru
    guru over 5 years