Reputation: 4598
I have views with a navigation bar and a tab bar. What I would like to happen is to hide the tab bar on a certain view and show the tab bar again when the user changes views.
I saw a snippet of code for hiding the tab bar:
-(void)makeTabBarHidden:(BOOL)hide
{
// Custom code to hide TabBar
if ( [tabBarController.view.subviews count] < 2 ) {
return;
}
UIView *contentView;
if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {
contentView = [tabBarController.view.subviews objectAtIndex:1];
} else {
contentView = [tabBarController.view.subviews objectAtIndex:0];
}
if (hide) {
contentView.frame = tabBarController.view.bounds;
}
else {
contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,
tabBarController.view.bounds.origin.y,
tabBarController.view.bounds.size.width,
tabBarController.view.bounds.size.height - tabBarController.tabBar.frame.size.height);
}
tabBarController.tabBar.hidden = hide;
}
from: http://nickwaynik.com/iphone/hide-tabbar-in-an-ios-app/
I call this on the view wherein I want the tab bar hidden
[self makeTabBarHidden:YES];
it works fine when i show/hide it on that view but when I navigate back to the previous view, the tab bar there is also hidden. I tried calling that function in the view's viewDidUnload
, viewWillDisappear
, viewDidDisappear
functions but nothing happens. The same is true when the function is called in the previous view's viewDidLoad
, viewWillAppear
, viewDidAppear
functions.
Upvotes: 60
Views: 73788
Reputation: 5646
Try this for hide / show:
- (void)viewWillDisappear:(BOOL)animated {
self.hidesBottomBarWhenPushed = NO;
}
- (void)viewWillAppear:(BOOL)animated {
self.hidesBottomBarWhenPushed = YES;
}
Upvotes: 2
Reputation: 516
Swift 3:
Set tab bar to hide in viewWillAppear
or viewDidAppear
self.tabBarController?.tabBar.isHidden = true
Upvotes: 2
Reputation: 73
self.navigationController.hidesBottomBarWhenPushed=YES;
Add this line to your viewDidLoad
or viewWillAppear
; this will hide you tab from bottom.
Upvotes: 1
Reputation: 1282
you can use below code but tabBar
remains hidden when you navigate back.
//hide tabbar
//self.tabBarController?.tabBar.isHidden = true
better way is to do through main.storyboard
check "Hide Bottom Bar on Push"
as I've done.
Upvotes: 0
Reputation: 512526
You can also do this in the Interface Builder for a storyboard. Select the View Controller that you want to hide the Tab Bar for and then select "Hide Bottom Bar on Push".
Upvotes: 36
Reputation: 5634
I just created a category on UITabBarController that allows you to hide the TabBar, optionally with an animation:
https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden
It adds the tabBarHidden
property (with isTabBarHidden
as its getter) and the - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated
method.
Upvotes: 13
Reputation: 162
The same property is available on the attributes inspector when you click on your view controller on your Xib or storyboard file.
Upvotes: 0
Reputation: 1521
You can set the UIViewController.hidesBottomBarWhenPushed instead:
DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[[self navigationController] pushViewController:detailViewController animated:YES];
[detailViewController release];
Upvotes: 147