2016-01-10 22 views
5

Prima di tutto, Ho visto tutte le risposte a How to make UINavigationBar Transparent in IOS 8?Transparent UINavigationBar e Make UINavigationBar transparent.Come rendere trasparente UINavigationBar?

Semplicemente non sembrano funzionare per me.

mio normale controller della vista (prima di provare a rendere la barra di navigazione trasparente) non ha problemi:

enter image description here

che sto usando (provato sia in viewDidLoad e viewWillAppear:):

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] 
               forBarMetrics:UIBarMetricsDefault]; 
self.navigationController.navigationBar.shadowImage = [UIImage new]; 
self.navigationController.navigationBar.translucent = YES; 
self.navigationController.view.backgroundColor = [UIColor clearColor]; 

sto ottenendo questo:

enter image description here

Sfondo barra di stato grigio, barra di navigazione completamente bianca che non si fonde con la barra di stato, quindi viene avviata la visualizzazione. Tutte le "soluzioni" alle altre "risposte" delle domande producono lo stesso risultato per me.

Ho anche provato a impostare self.edgesForExtendedLayout = UIRectEdgeNone; o self.edgesForExtendedLayout = UIRectEdgeAll; ma anche questo non ha avuto alcun impatto.

Come posso rendere trasparente la barra di navigazione senza rovinare tutto?

UPDATE: seguito la risposta di Warif Akhand Rishi, ho cambiato self.navigationController.view.backgroundColor = [UIColor clearColor];-self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];, ora sto ottenendo un grigio, unificata Stato/barra di navigazione, ma ancora non trasparente:

enter image description here

AGGIORNAMENTO 2: Ho collegato il debugger della vista e lo sfondo grigio sembra provenire dal profondo delle radici della gerarchia della vista e il contenuto della mia vista non si sta estendendo. Ho provato self.edgesForExtendedLayout = UIRectEdgeAll; di nuovo con il codice più recente, ma ancora senza alcun risultato:

enter image description here

+0

come si nasconde la barra di stato? –

+1

Nella tua vista controller stai estendendo i bordi sotto le barre in alto? – beyowulf

+0

@SamB Non voglio nascondere la barra di stato. –

risposta

2

Ok, dopo aver lottato, ho risolto il problema da solo.C'era più di un problema. Non si trattava dei bordi estesi, si trattava della linea self.navigationController.view.backgroundColor = [UIColor clearColor]; (che doveva essere self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; come suggerito da Warif Akhand Rishi) e anche della proprietà di sottoview delle clip della mia vista tabella. Ho modificato la linea e disattivato anche il ritaglio della vista tabella e ora funziona come previsto.

0

Prova questa seguente riga di codice nel controller, Possa il vostro problema vengono risolti: -

self.extendedLayoutIncludesOpaqueBars = NO; 

self.automaticallyAdjustsScrollViewInsets = NO; 

And Remove this line :- self.edgesForExtendedLayout = UIRectEdgeNone 
+0

Provato in molti posti ('viewDidLoad',' viewDidAppear: '...), purtroppo, nulla è cambiato. –

3

Cambia la tua

self.navigationController.view.backgroundColor = [UIColor clearColor]; 

a questo

self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 
+0

ora sembra migliore (grigio, unificato con barra di stato, ma non è trasparente) –

+0

Per test 'self.view.backgroundColor = [UIColor redColor];' se si vede il colore rosso nella parte superiore della vista. Significa che c'è una lacuna nella tua parte superiore. Sposta le tue opinioni. (l'origine.y) –

0

1.La barra di navigazione è bianca, non nera. È necessario disporre di una vista (una vista bianca) in NavigationBar, che è il superview di greyView. L'impostazione trasparente funziona, ma non la si può vedere, perché il fontcolor è anch'esso bianco.
2. Quindi devi aggiornare i vincoli di greyView, in modo che possa estendersi sotto la barra di navigazione. Quindi puoi vedere il tuo titolo bianco.
3. Forse è necessario modificare l'UIStatusBarStyle di statusBar su predefinito o con contenuto luminoso, ho notato che il colore del carattere di statusBar è troppo bianco.

4

rapida barra 4 nav trasparente: (assicurati vista si estende dietro barra di navigazione a mostrare attraverso, altrimenti sarà solo essere nero)

navigationController?.navigationBar.isTranslucent = true 
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
navigationController?.navigationBar.shadowImage = UIImage() //remove pesky 1 pixel line 

o semplicemente abbinare il colore barra di navigazione al colore della vostra vc corrente, ma mantenere è opaco. con traslucido impostato su false visualizzazioni figlio si allineano con la barra di navigazione invece di andare sotto di essa.

navigationController?.navigationBar.isTranslucent = false 
navigationController?.navigationBar.barTintColor = UIColor.yourColor 
navigationController?.navigationBar.shadowImage = UIImage() //remove pesky 1 pixel line