Reputation: 311
I have a tabBar
+ NavigationViewController
. The Tab bar has collection view with cells(Say view1) and with cells a push seague is implemented to another view(Say view2).
In view2 I want to have a navBar
but no tab bar.
I tried
self.tabBarController?.tabBar.hidden = true
,
it worked fine for view2 but when I went back to view1 by back button the tab was still hidden( even after in view1 class I added self.tabBarController?.tabBar.hidden = false
in viewDidLoad func).
How can i make the tab bar reappear in view1?
I'm working in swift.
Upvotes: 29
Views: 35130
Reputation: 2273
In my case, I use hidesBottomBarWhenPushed
before I push the destination view controller.
func showSecondViewController() {
let vc = SecondViewController()
vc.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(vc, animated: true)
}
Upvotes: 15
Reputation: 1592
Use in prepareForSegue
:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
RecipeDetailViewController *destViewController = segue.destinationViewController;
destViewController.recipeName = [recipes objectAtIndex:indexPath.row];
// Hide bottom tab bar in the detail view
destViewController.hidesBottomBarWhenPushed = YES;
}
}
Upvotes: 27
Reputation: 759
Make sure to check this option only on the ViewController whose tab bar you wish to be hidden.
Thanks to iHarshil for the suggestion.
Upvotes: 50
Reputation: 592
You have to work with viewWillAppear
or viewDidAppear
. viewDidLoad
will be called when view1 is loading (showing) the first time. If you move from view1 to view2 and back the viewDidLoad won't be called again. Therefore you have to use viewWillAppear or viewDidAppear like
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.hidden = false
}
Put this code in your view1 controller. The viewWillAppear
or viewDidAppear
will be called every time navigating back to view1
Upvotes: 4
Reputation: 3327
if you want to hide TabBarController Bottom Bar : #Swift 3
In YourViewController : in ViewDidLoad() method
self.tabBarController?.tabBar.isHidden = false
Upvotes: 3
Reputation: 1698
Bruno Fernandes's answer in Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "YourSegueIdentifier" {
let destinationController = segue.destinationViewController as! YourViewController
destinationController.hidesBottomBarWhenPushed = true
}
}
This was the answer that worked for me. Putting hidesBottomBarWhenPushed
in the viewDidLoad
method didn't work.
Thanks Bruno!
Upvotes: 24
Reputation: 69499
In the viewDidload
set the UIViewController hidesBottomBarWhenPushed
to yes:
self.hidesBottomBarWhenPushed = YES;
This way the UINavigationController
takes care of hiding the tab bar.
Upvotes: 45