How to hide UITabBar?
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
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;
}
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, 2021Comments
-
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 over 12 yearsI have three view controllers that the UITabBarController can present. On the second view controller, I put
self.hidesBottomBarWhenPushed = YES
ininitWithNibName:bundle:
. When I tested tapping into the second view controller, the UITabBar was still there. -
Uygar Y over 10 yearsUsing 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 over 10 yearsAwesome tip, wish I could upvote more. I didn't even know there WAS a layer backing the UIViewController!
-
Adam over 10 yearsTried on a new project with ios7 - no effect
-
Adam over 10 yearsThis worked for me on ios7 where setting same value in code didnt
-
Micah over 10 yearsWhere is this checkbox?
-
SmileBot almost 10 yearsDo this on the destination view controller, not the source!
-
orafaelreis over 9 yearsgreat, but... try not use fixed values like 431 or 480. You should always write code to run in any screen size!
-
orafaelreis over 9 yearsIf you want really resize the view (not only hide tabBar) set self.tabBarController.tabBar.hidden = hiddenTabBar;
-
manonthemoon almost 8 yearsWhen I go back to the screen, I have a black space on top of the tab bar.
-
guru over 5 yearscould you help me on : stackoverflow.com/questions/51963911/…