2012-01-13 4 views
5

La mia app utilizza un controller di navigazione con un'immagine attiva nella barra di navigazione della pagina iniziale. L'immagine di sfondo viene eseguita inserendoRimuovi immagine di sfondo su UINavigationBar

[navigationController.navigationBar setBackgroundImage:navImage forBarMetrics:UIBarMetricsDefault]; 
[_window addSubview:navigationController.view]; 

nel delegato dell'app. La barra di navigazione visualizza questa immagine bene.

Ogni altra vista sarà non avere un'immagine nella barra di navigazione. Pertanto, ho bisogno di rimuovere questa immagine di sfondo quando viene premuto un altro controller di visualizzazione. qualcuno sa come questo potrebbe essere fatto?

Ci sono molte risposte online sull'aggiunta o sulla modifica di un'immagine della barra di navigazione, ma questa domanda è leggermente diversa. Grazie in anticipo.

risposta

3

Credo che questa sia la prima risposta reale a questo per iOS5, il problema principale è la "rimozione" del l'immagine di sfondo, una volta si è fatto. Bene, mantieni l'immagine esistente e rimettila quando hai finito.

@implementation MyViewController { 
    UIImage *_defaultImage; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    _defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault]; 
} 
+0

approccio interessante! – alexshafran

0

Sembra che il modo più semplice per farlo è quello di:

1) impostare l'alpha della barra di navigazione sulla home page di 0,000001

2) ha messo l'immagine di sfondo in un UIImageView "dietro "la barra di navigazione (che ora è deselezionata)

3) utilizzare viewWillAppear/viewWillDisappear per impostare l'opacità della barra di spostamento su 1 o su 0,00001 quando le visualizzazioni vengono visualizzate/visualizzate.

5

Per rimuovere UINavigationBar background in iOS 5 o versione successiva, si dovrebbe fare questo:

[navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 

Speranza che aiuta

+1

Questo appare come dovrebbe funzionare, ma che la funzione cambia solo qualcosa per me se mi passa un'immagine reale. – rgbrgb

+0

La stessa cosa qui. –

+2

Non funziona. come ha detto rgbrgb. fa solo qualcosa con un'immagine valida. –

3

È possibile impostare un'immagine di sfondo un'immagine vuota creata in fase di esecuzione con.

UIGraphicsBeginImageContextWithOptions(CGSizeMake(36, 36), NO, 0.0); 
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault]; 

Creare un'immagine vuota in fase di esecuzione: How to create a blank transparent png in Objective-C?

+0

Funziona bene. Anche se ho usato 'CGSizeZero' –

0

Niente qui ha funzionato per me. Dopo aver cercato ore, l'unica cosa che ha funzionato è stata la seguente: source code example fornita da Apple.

Ho inserito il seguente codice e ha funzionato e rimosso l'immagine della barra di navigazione da altri controller di vista finalmente !!

// Reset everything about navigation bar. (Other flows' background image used to show up on another view controller) 
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .default) 
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .compact) 
    self.navigationController!.navigationBar.barTintColor = nil 
    self.navigationController!.toolbar.barTintColor = nil 
    self.navigationController!.toolbar.isTranslucent = true 

Spero che questo aiuti qualcuno.

Acclamazioni