2016-06-24 20 views
7

ho il seguente codice per rendere la barra di navigazione trasparente, ma mentre ancora la visualizzazione del pulsante indietro, questo funziona su tutte le versioni di iOS, ma la sua smesso di funzionare con l'IOS 10 betaCome rendere barra di navigazione trasparenti in iOS 10

navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
    navigationBar.shadowImage = UIImage() 
    navigationBar.isTranslucent = true 

È cambiato qualcosa con iOS 10 in quest'area?

Nota non è possibile utilizzare navigationBar.isHidden in quanto ciò comporterebbe la scomparsa del pulsante di navigazione barra e titolo, ecc.

risposta

10

Non so cosa sia cambiato in iOS 10 per impedire il funzionamento del codice precedente, ma per risolverlo ho creato un'immagine trasparente (deve essere solo un pixel in dimensione) e ho usato il seguente codice per fare la barra di navigazione è trasparente (ma mostra ancora il pulsante di navigazione indietro).

let transparentPixel = UIImage(named: "TransparentPixel") 
    navigationBar.setBackgroundImage(transparentPixel, for: UIBarMetrics.default) 
    navigationBar.shadowImage = transparentPixel 
    navigationBar.backgroundColor = UIColor.clear() 
    navigationBar.isTranslucent = true 

Per inciso, se si desidera cambiare il colore della barra di navigazione, è possibile utilizzare lo stesso principio:

let redPixel = UIImage(named: "RedPixel") 
    navigationBar.setBackgroundImage(redPixel, for: UIBarMetrics.default) 
    navigationBar.shadowImage = redPixel 
    navigationBar.isTranslucent = false 
6

La soluzione @Essence fornito funziona perfettamente!
Questo è quello che sto usando anche per creare l'immagine 1px trasparente per codice:

class MainClass: UIViewController { 

    let transparentPixel = UIImage.imageWithColor(color: UIColor.clear) 

    override func viewWillAppear(_ animated: Bool) { 
    drawCustomNavigationBar() 
    } 

    func drawCustomNavigationBar() { 
    let nav = (self.navigationController?.navigationBar)! 
    nav.setBackgroundImage(transparentPixel, for: UIBarMetrics.default) 
    nav.shadowImage = transparentPixel 
    nav.isTranslucent = true 
    } 
} 

extension UIImage { 
    class func imageWithColor(color: UIColor) -> UIImage { 
    let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1)) 
    UIGraphicsBeginImageContext(rect.size) 
    let context = UIGraphicsGetCurrentContext()! 

    context.setFillColor(color.cgColor) 
    context.fill(rect) 

    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return image! 
    } 
} 
1

Swift 3.x

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
self.navigationController?.navigationBar.shadowImage = UIImage() 
self.navigationController?.navigationBar.backgroundColor = .clear 
self.navigationController?.navigationBar.isTranslucent = true