2014-04-15 7 views
7

Sto installando un aspetto personalizzato per un controller di navigazione specifica:iOS UINavigationBar colore di tinta appare più scuro del colore impostato

//Set Cutom Nav Bar Appearance 
[[UINavigationBar appearanceWhenContainedIn:[MyNavigationControllerClass class], nil] setBackgroundImage: nil forBarMetrics: UIBarMetricsDefault]; 
[[UINavigationBar appearanceWhenContainedIn:[MyNavigationControllerClass class], nil] setBarTintColor: self.tableView.backgroundColor]; 

Quando viene visualizzato il controller di navigazione, il colore atteso è RGB (247, 247, 247) - che ho ricontrollato è anche il valore del colore tableView.background quando il valore è impostato - ma appare sullo schermo come RGB (227, 227, 227). Potrebbe esserci una proprietà diversa del proxy di aspetto di UINavigationBar che sta cambiando il colore visualizzato sullo schermo?

Grazie!

Edit:

Inoltre, se ho impostato il barTintColor direttamente utilizzando il colore desiderato, il barTintColor visualizzato sullo schermo è ancora più scuro di quanto previsto:

UIColor* navBarBackgroundColor = [UIColor colorWithRed: (247.0/255.0) green: (247.0/255.0) blue: (247.0/255.0) alpha: 1]; 
//Set Cutom Nav Bar Appearance 
[[UINavigationBar appearanceWhenContainedIn:[MyNavigationControllerClass class], nil] setBackgroundImage: nil forBarMetrics: UIBarMetricsDefault]; 
[[UINavigationBar appearanceWhenContainedIn:[MyNavigationControllerClass class], nil] setBarTintColor: navBarBackgroundColor]; 

Soluzione

Ecco il codice della soluzione derivato dalla risposta di @ Matt. Speranza che aiuta qualcuno

CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); 
UIGraphicsBeginImageContext(rect.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, [self.tableView.backgroundColor CGColor]); 
CGContextFillRect(context, rect); 
UIImage *navBarImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

//Set Cutom Nav Bar Appearance 
[[UINavigationBar appearanceWhenContainedIn:[MyNavigationControllerClass class], nil] setBackgroundImage: navBarImage forBarMetrics: UIBarMetricsDefault]; 
+0

Aggiungeresti la riga di codice dove stai specificando i valori RGB? –

+0

Potrebbero essere le impostazioni alfa o trasparenza della barra? Hai controllato? – Michal

+0

@William il colore tableView.background che viene inoltrato alla barra di navigazione viene impostato nello storyboard. Indipendentemente da ciò, anche se imposto esplicitamente il colore desiderato, viene comunque mostrato più scuro del colore impostato (codice in Modifica sopra) – Glavid

risposta

13

Il modo per impostare il colore di una barra di navigazione è esattamente l'esatto contrario di quello che stai facendo. Gli stai dando un colore tinta e nessuna immagine di sfondo. Invece, dargli un'immagine di sfondo costituita da un rettangolo del colore desiderato - e nessun colore tinta.

Impostare anche il numero translucent su NO.

+0

Sembra strano dover impostare il colore di sfondo in questo modo, ma funziona. Immagino che i barTintColors vengano modificati dal sistema operativo prima di essere visualizzati sullo schermo, così come dici che questo è il "modo migliore per ottenere un colore ESATTO". Grazie per l'aiuto .. postando il codice della soluzione nella domanda. – Glavid

+0

È in parte l'intera attività di traslucenza e in parte il significato della parola "tinta" (che deve essere presa sul serio). – matt