user1470914
user1470914

Reputation: 1407

iOS Navigation bar smooth transition

I have an app where the first screen (the menu for the app) does not need a navigation bar BUT the rest of the app does.

The code I am using works fine in the sense that the navigation bar is not present on the menu screen and is present elsewhere in the app BUT the BIG PROBLEM is that once you go back to the menu the navigation bar appears for about a split second and then disappears.

That is NOT a very smooth transition.

How do I make the transition SMOOTHER so that the navigation bar DOESN'T even appear for a second when I go back to the menu screen?

Here is the code that I am using:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        [self.navigationController setNavigationBarHidden:YES animated:NO];
    }
    return self;
}

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

-(void) viewDidAppear: (BOOL)animated {
    [[self navigationController] setNavigationBarHidden:YES animated:NO];

    [super viewDidAppear:animated];
}

Upvotes: 2

Views: 2025

Answers (4)

Pulkit Goyal
Pulkit Goyal

Reputation: 5654

Instead of hiding and showing the navigation bar, you can update the alpha for the navigation bar. It will animate smoothly during the transition. For the view controller with transparent nav bar, instead of modifying the nav bar, create a navbar (or just the back button and title etc.) manually in the second controller's view. We will then hide the navbar when transitioning from first view controller to the second one.

On your second controller's viewWillDisappear and on your first view controller's viewWillAppear:, set the navigation bar alpha to zero using self.navigationController.navigationBar.alpha = 0;. Since this is in animation block, this will make the navigation bar disappear during the push animation.

Set the alpha back to one in second controller's viewWillAppear and first controller viewWillDisappear.

Upvotes: 0

pxpgraphics
pxpgraphics

Reputation: 1357

In your first view controller:

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

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

In your second view controller (not needed, but good practice for code clarity) :

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

Upvotes: 1

vamsi575kg
vamsi575kg

Reputation: 604

set this in the view did disappear in first screen of the app

    [[self navigationController] setNavigationBarHidden:NO animated:YES];

and this in viewdiddisappear of the second VC

 [self.navigationController setNavigationBarHidden:YES animated:NO];

Upvotes: 0

Venk
Venk

Reputation: 5955

Try like this,

-(void) viewWillAppear: (BOOL)animated {

    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

Hope it may helps you...

Upvotes: 2

Related Questions