2012-04-24 11 views

risposta

5

io penso che si debba sottoclasse UINavigationBar e sovrascrivere -(void)drawRect:(CGRect)rect:

UIColor *colorFlat = /* any UIColor*/ 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, [colorFlat CGColor]); 
CGContextFillRect(context, rect); 
+0

Grazie. Funziona come un fascino. Per impostare i colori dei pulsanti, ho cambiato il colore della tinta della barra di navigazione, e ottengono il colore della tinta. Proprio come mi aspettavo. – MartinHN

+0

Sai se è possibile farlo tramite il proxy dell'aspetto? '[[UINavigationBar appearance] .....];' – MartinHN

+0

Non lo so, io uso questo codice in un progetto con iOS 4.2 quando l'aspetto non era disponibile –

-4

Creare un CustomUIViewController che si estende UIViewController e sovrascrivere viewDidLoad a qualcosa di simile:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.view.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0]; 
} 

Dopo di che, utilizzare il vostro CustomUIViewController nel vostro controller.

Credits

+0

non è possibile fare a meno di un'immagine? – MartinHN

+0

Shure, scusa per l'errore, prova a usare: [Colore UIColore: rosso: 0,0 verde: 0,0 blu: 1,0 alfa: 1,0] – kcho0

+0

Non ho fortuna. Non dovrei impostare lo sfondo sulla barra di navigazione? per esempio. 'Self.navigationController.navigationBar.backgroundColor'? Che non funziona :) :) – MartinHN

46

Il seguente codice si traduce anche in tinta unita di barra di navigazione:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundColor:[UIColor redColor]]; 
+2

Assicurati di impostare anche il colore della tinta oi pulsanti sulla barra di navigazione non otterranno il colore: [[UINavigationBar appearance] setTintColor: [UIColor redColor]]; –

+0

Dove lo fai? Sto cercando di farlo in viewDidLoad del controller di visualizzazione con la barra di navigazione e non sembra avere effetto. Ha bisogno di essere fatto qualche tempo prima. Ho uno storyboard che sembra sovrascriverlo. – David

+0

David, è necessario farlo prima di presentare la vista. La configurazione di "aspetto" non aggiorna le viste visibili. Se si desidera impostare questo a livello globale, il posto migliore per farlo sarebbe nell'applicazione: didFinishLaunchingWithOptions :. – Lubiluk

0

ho usato per ignorare metodo drawRect e colore di riempimento; ma dopo l'aggiornamento di iOS7 provoca alcuni problemi su UINavigationBar. Se si scrive il proprio metodo drawrect, anche se si chiama [super drawRect], cambia la dimensione della barra e si finisce con una barra di navigazione con 44 pixel di altezza. La barra di stato è vuota.

Per ottenere un solido navigationBar di colore, ho usato un'immagine come immagine di sfondo (qualsiasi immagine colorata solida piccolo farà quanto si sta stretching) e ha aggiunto queste righe all'interno del metodo initWithFrame della sottoclasse UINavigationBar:

[self setBackgroundColor:[UIColor clearColor]]  
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"bgimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault]; 
0

Il seguente codice ha funzionato per me:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]]; 
self.navigationController.navigationBar.translucent = NO; 
[self.navigationController.navigationBar setShadowImage:[UIImage new]]; 
Problemi correlati