2013-11-14 15 views
15

Sto cercando di cambiare l'aspetto di UINavigationBar nella mia app iOS7. Sto facendo il seguente:iOS 7 UINavigationBar aspetto non funzionante prima volta ...

- (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]]; 
} 

Ma, la prima volta che presento l'UITableViewController è la barra di navigazione iOS7 standard, allora premo a casa e riproporla ed è il mio nuovo look.

Qualche idea sul perché non funziona la prima volta?

+0

provare a spostare il codice in viewDidAppear – Ilario

+0

Ho provato lì e no, ho anche provato in viewWillAppear. – LilMoke

+1

Per qualsiasi altra persona che potrebbe riscontrare il problema sam, ho modificato il codice da questo: [[UINavigationBar appearance] setBa ... a questo: [self.navigationController.navigationBar setBa ... e anche nella riga setTitleTextAttributes. Risposta trovata qui: http://stackoverflow.com/questions/17361500/how-to-set-navigation-bar-image-ins-ios-7 – LilMoke

risposta

26

Non modificare l'aspetto ma direttamente la barra di navigazione. L'aspetto riguarda solo le istanze future ma non quelle già create.

Cambio:

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

a:

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

In realtà ho lo stesso problema e sto impostando l'aspetto prima del mio controller di navigazione è istanziato ... –

+0

Questo spiega molto! – kokluch

+0

La vera soluzione è la risposta di @ fabf98dev qui sotto. Non è necessario utilizzare navigationController, devi solo assicurarti di chiamare questa linea (UINavigationBar.Appear ..) prima di mostrare la tua prima viewController. –

2

la risposta prima solo si aiuta l'immagine di sfondo con ma non con la title text attributes.

Non è necessario modificare il codice, ma tutto quello che dovete fare è spostarlo

applicationDidFinishLaunchingWithOptions

nel file AppDelegate.m.