Come modificare il colore della barra di navigazione in iOS 7 o 6?


Answers

Se vuoi avere una tinta unita per la barra di navigazione in iOS 6 simile a iOS 7, usa questo:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor greenColor]];

in iOS 7 usa il barTintColor questo modo:

navigationController.navigationBar.barTintColor = [UIColor greenColor];

o

 [[UINavigationBar appearance] setBarTintColor:[UIColor greenColor]];
Question

Voglio cambiare il colore del colore della barra di navigazione, ma non sono sicuro se dovrei cambiare la tonalità o lo sfondo. So che iOS 7 sta per un design più piatto (anche raccomandando la rimozione di gradienti ), ma sto avendo problemi a decifrare i due. Anche se imposto un colore di sfondo, non fa nulla.

In questa immagine, lo sfondo è impostato su verde, ma la barra è ancora blu:




Ecco come impostarlo correttamente per iOS 6 e 7.

+ (void)fixNavBarColor:(UINavigationBar*)bar {
    if (iosVersion >= 7) {
        bar.barTintColor = [UIColor redColor];
        bar.translucent = NO;
    }else {
        bar.tintColor = [UIColor redColor];
        bar.opaque = YES;
    }
}



In iOS7, se il tuo controller di navigazione è contenuto nella barra delle schede, in splitview o in un altro contenitore, per l'aspetto della barra di navigazione a modifica globale utilizzare il seguente metodo:

[[UINavigationBar appearanceWhenContainedIn:[UITabBarController class],nil] setBarTintColor:[UIColor blueColor]];



    you can add bellow code in appdelegate.m .if your app is navigation based

    // for background color
   [nav.navigationBar setBarTintColor:[UIColor blueColor]];

    // for change navigation title and button color
    [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],
    NSForegroundColorAttributeName,               
    [UIFont fontWithName:@"FontNAme" size:20],
    NSFontAttributeName, nil]];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];



Puoi controllare la versione di iOS e semplicemente impostare il colore della tinta sulla barra di navigazione.

if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.9529 green:0.4392 blue:0.3333 alpha:1.0];
}else{

    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:0.9529 green:0.4392 blue:0.3333 alpha:1.0];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}



Sto usando il seguente codice (in C #) per cambiare il colore della barra di navigazione:

NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.Default);
NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.LandscapePhone);
NavigationController.NavigationBar.BackgroundColor = UIColor.Green;

Il trucco è che è necessario eliminare l'immagine di sfondo predefinita e quindi il colore apparirà.




Non sono sicuro di cambiare la tonalità rispetto al colore di sfondo, ma questo è il modo in cui cambi il colore della tinta della barra di navigazione:

Prova questo codice ..

[navigationController.navigationBar setTintColor:[UIColor redColor]; // Rosso come esempio.




La proprietà del colore di sfondo viene ignorata su una UINavigationBar , quindi se si desidera regolare l'aspetto e il tatto è necessario utilizzare tintColor o chiamare alcuni degli altri metodi elencati in "Personalizzazione tintColor della barra" del riferimento alla classe UINavigationBar (come setBackgroundImage:forBarMetrics: .

Si noti che la proprietà tintColor funziona in modo diverso in iOS 7, quindi se si desidera un aspetto coerente tra iOS 7 e la versione precedente utilizzando un'immagine di sfondo potrebbe essere la soluzione migliore. Vale anche la pena ricordare che non è possibile configurare l'immagine di sfondo nello Storyboard, dovrai creare un IBOutlet su UINavigationBar e modificarlo in viewDidLoad o in un altro posto appropriato.




Links