Ilya Suzdalnitski
Ilya Suzdalnitski

Reputation: 53540

How to hide UITabBar?

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.

Upvotes: 40

Views: 23705

Answers (5)

Xaxxus
Xaxxus

Reputation: 1809

There is no built in way to hide the tab bar for your current view.

You can hide it when pushing a view with the hidesBottomBarWhenPushed variable.

If you want to hide your tab bar on your current view, you can do the following:

Gist here

Note that UIKit seems to bring the tab bar to come back on app resume. So you will have to subscribe to the notification UIApplication.didBecomeActiveNotification and call the above function.

Upvotes: 0

Volodymyr B.
Volodymyr B.

Reputation: 3441

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

Upvotes: 9

Vladimir Shutyuk
Vladimir Shutyuk

Reputation: 2976

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.

Upvotes: 13

titusmagnus
titusmagnus

Reputation: 2082

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!

Upvotes: 9

Panagiotis Korros
Panagiotis Korros

Reputation: 11050

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.

Upvotes: 68

Related Questions