iPhone hide Navigation Bar only on first page iPhone hide Navigation Bar only on first page ios ios

iPhone hide Navigation Bar only on first page


The nicest solution I have found is to do the following in the first view controller.

Objective-C

- (void)viewWillAppear:(BOOL)animated {    [self.navigationController setNavigationBarHidden:YES animated:animated];    [super viewWillAppear:animated];}- (void)viewWillDisappear:(BOOL)animated {    [self.navigationController setNavigationBarHidden:NO animated:animated];    [super viewWillDisappear:animated];}

Swift

override func viewWillAppear(_ animated: Bool) {    self.navigationController?.setNavigationBarHidden(true, animated: animated)    super.viewWillAppear(animated)}override func viewWillDisappear(_ animated: Bool) {    self.navigationController?.setNavigationBarHidden(false, animated: animated)    super.viewWillDisappear(animated)} 

This will cause the navigation bar to animate in from the left (together with the next view) when you push the next UIViewController on the stack, and animate away to the left (together with the old view), when you press the back button on the UINavigationBar.

Please note also that these are not delegate methods, you are overriding UIViewController's implementation of these methods, and according to the documentation you must call the super's implementation somewhere in your implementation.


Another approach I found is to set a delegate for the NavigationController:

navigationController.delegate = self;

and use setNavigationBarHidden in navigationController:willShowViewController:animated:

- (void)navigationController:(UINavigationController *)navigationController       willShowViewController:(UIViewController *)viewController                     animated:(BOOL)animated {       // Hide the nav bar if going home.    BOOL hide = viewController != homeViewController;    [navigationController setNavigationBarHidden:hide animated:animated];}

Easy way to customize the behavior for each ViewController all in one place.


One slight tweak I had to make on the other answers is to only unhide the bar in viewWillDisappear if the reason it is disappearing is due to a navigation item being pushed on it. This is because the view can disappear for other reasons.

So I only unhide the bar if this view is no longer the topmost view:

- (void) viewWillDisappear:(BOOL)animated{    if (self.navigationController.topViewController != self)    {        [self.navigationController setNavigationBarHidden:NO animated:animated];    }    [super viewWillDisappear:animated];}