Внешний вид iOS 7 UINavigationBar не работает в первый раз...

Я пытаюсь изменить внешний вид UINavigationBar в моем приложении iOS7. Я делаю следующее:

- (void)viewDidLoad
{
    [super viewDidLoad];

    m_sNumberToCall = @"";

    UIBarButtonItem * btn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"IconHome.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(btHomeTouched:)];
    self.navigationItem.leftBarButtonItem = btn;

    self.navigationController.navigationBar.translucent = YES;


    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

    NSShadow * shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(0, 1);
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0],
                                                           NSForegroundColorAttributeName,
                                                           shadow,
                                                           NSShadowAttributeName,
                                                           [UIFont fontWithName:@"Helvetica-Bold" size:21.0],
                                                           NSFontAttributeName,
                                                           nil]];
}

Но в первый раз, когда я представляю UITableViewController, это стандартная панель навигации iOS7, затем я возвращаюсь домой и снова представляю ее, и это мой новый облик.

Любые идеи, почему это не работает в первый раз?

Ответы

Ответ 1

Не меняйте внешний вид, но панель навигации напрямую. Внешний вид влияет только на будущие экземпляры, но не на уже созданные.

Изменить:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

в

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

Ответ 2

Ответ только поможет вам с фоновым изображением, но не с title text attributes.

Вам не нужно менять код, но все, что вам нужно сделать, это переместить его на

applicationDidFinishLaunchingWithOptions

в вашем файле AppDelegate.m.