Nicola Giancecchi
Nicola Giancecchi

Reputation: 3065

UINavigationBar titleTextAttributes not updated after coming back from a View Controller

I'm using a UINavigationController to display some view controllers. I need to change the color of the navigation bar title every time I switch between two view controllers. This is what I'm doing now:

First View Controller

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.navigationController.navigationBar.titleTextAttributes = 
         @{
              NSForegroundColorAttributeName: [UIColor whiteColor],
              NSFontAttributeName: [UIFont systemFontOfSize:14.0]
         };
}

Second View Controller

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad:animated];

    self.navigationController.navigationBar.titleTextAttributes = 
         @{
              NSForegroundColorAttributeName: [UIColor blackColor],
              NSFontAttributeName: [UIFont systemFontOfSize:14.0]
         };
}

The first time I load First VC and when I push Second VC, the title color is handled correctly. The problem here is that when I pop from Second to First view controller, the title is still black, even if viewWillAppear is called correctly and, if I print self.navigationController.navigationBar.titleTextAttributes, the values seems to be updated (NSForegroundColorAttributeName is white).

Upvotes: 13

Views: 2864

Answers (2)

aaorn
aaorn

Reputation: 11

if you are using UINavigationBarAppearance, set titleTextAttributes at your appearance.

appearance.titleTextAttributes = [.foregroundColor: UIColor.white]

Upvotes: 1

varun anand dudeja
varun anand dudeja

Reputation: 89

Maybe because of the push/pop transition animation, values are not reflecting. Try calling it this way.

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    dispatch_async(dispatch_get_main_queue(), ^{
        self.navigationController.navigationBar.titleTextAttributes =
        @{
            NSForegroundColorAttributeName: [UIColor blackColor],
            NSFontAttributeName: [UIFont systemFontOfSize:14.0]
        };
    });
}    

Upvotes: 3

Related Questions