2016-05-18 28 views
7

Desidero rendere trasparente il NavigationBar in uno solo ViewController. Tuttavia, al variare della NavigationBar in un singolo ViewController, l'intero navigationController diventa trasparente e dopo pochi secondi crashes.Here è il mio blocco di codice:Come posso rendere UINavigationController trasparente solo in un controller di visualizzazione?

override func viewWillAppear(animated: Bool) { 
     self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
     self.navigationController?.navigationBar.shadowImage = UIImage() 
     self.navigationController?.navigationBar.translucent = true 
     self.navigationController!.view.backgroundColor = UIColor.clearColor() 
    } 



override func viewDidDisappear(animated: Bool) { 
     self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default) 
     self.navigationController?.navigationBar.shadowImage = nil 
     self.navigationController?.navigationBar.translucent = true 

    } 

Si blocca in linea

self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default) 
+1

È possibile effettuare il controller di navigazione personalizzato per quel particolare controller di visualizzazione –

+0

Si prega di chiarire un po 'di più. Grazie –

+0

Lo schianto su quella linea indica che il controller di navigazione è nullo, sei sicuro di non avere nessun altro codice che lo sta impostando su zero? – paulvs

risposta

0

Come è stato menzionato, creare un controller di navigazione personalizzato. Here è un tutorial come fare questo (è in objc, ma penso che non dovrebbe essere un problema per voi di fare questo a Swift)

+0

Grazie cercherà fissandola utilizzare questo –

2

Prova dato codice per rendere barra di navigazione trasparenti in rapida: -

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
    self.navigationController?.navigationBar.shadowImage = UIImage() 
    self.navigationController?.navigationBar.translucent = true 
    self.navigationController!.view.backgroundColor = UIColor.clearColor() 
    self.navigationController?.navigationBar.backgroundColor = UIColor.clearColor() 

Spero che questo codice vi aiuterà a .. Grazie

1

in viewWillAppear,

self.navigationController!.navigationBar.backgroundColor = UIColor.clearColor() 

e in viewWillDisappear

self.navigationController!.navigationBar.backgroundColor = UIColor(red: (247.0/255.0), green: (247.0/255.0), blue: (247.0/255.0), alpha: 1) // this is default bar color you can set your desired color if you are using custom color for navigation bar 

Spero che questo vi aiuterà :)

+0

aggree con voi –

+1

Consiglia mettendo in 'viewWillDisappear' invece per evitare il leggero ritardo. D'accordo con l'approccio però – Sami

+0

Fatto! Modificato didaopear per willappear – Lion

0

Swift 4

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
self.navigationController?.navigationBar.shadowImage = UIImage() 
self.navigationController?.navigationBar.isTranslucent = true 
self.navigationController!.view.backgroundColor = UIColor.clear 
self.navigationController?.navigationBar.backgroundColor = UIColor.clear 
0

Possiamo raggiungere questo requisito come questo:

In cui UIViewController vogliamo cancellare il colore NavigationBar dovrebbe essere chiaro in quel UIViewController abbiamo bisogno di scrivere questi codici in viewDidLoad, viewWillAppear e viewWillDisappear metodo

Nel metodo viewDidLoad abbiamo bisogno di scrivere che per un risultato migliore se non scriviamo mettere il frammento di codice, il colore navigation bar cambierà dopo la visualizzazione mostrata.

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
    self.navigationController?.navigationBar.shadowImage = UIImage() 
    self.navigationController?.navigationBar.isTranslucent = true 
} 


override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
    self.navigationController?.navigationBar.shadowImage = UIImage() 
    self.navigationController?.navigationBar.isTranslucent = true 
    self.navigationController?.navigationBar.barTintColor = UIColor.clear 
    self.navigationController?.navigationBar.backgroundColor = UIColor.clear 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 

    self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default) 
    self.navigationController?.navigationBar.shadowImage = nil 
    self.navigationController?.navigationBar.isTranslucent = true 
} 

quando si passa a un'altra schermata (Puch un'altra UIViewController) sullo stesso UINavigationController abbiamo bisogno di impostare la barTintColor altrimenti sarà apparire come colore nero.