Reputation: 53540
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
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:
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
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;
}
Upvotes: 9
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
Upvotes: 13
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
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