J'ai le code suivant pour rendre la barre de navigation transparente, mais tout en affichant le bouton Précédent, cela fonctionne sur toutes les versions d'iOS, mais il ne fonctionne plus avec iOS 10 bêta.
navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
navigationBar.shadowImage = UIImage()
navigationBar.isTranslucent = true
Quelque chose a changé avec iOS 10 dans ce domaine?
Notez qu'il n'est pas possible d'utiliser navigationBar.isHidden car cela entraînerait la disparition du bouton précédent de la barre de navigation, du titre, etc.
Je ne sais pas ce qui a changé dans iOS 10 pour empêcher le code précédent de fonctionner, mais pour le corriger, j'ai créé une image transparente (elle ne doit avoir qu'un pixel) et j'ai utilisé le code suivant pour rendre la barre de navigation transparente. (mais en affichant toujours le bouton de navigation arrière).
let transparentPixel = UIImage(named: "TransparentPixel")
navigationBar.setBackgroundImage(transparentPixel, for: UIBarMetrics.default)
navigationBar.shadowImage = transparentPixel
navigationBar.backgroundColor = UIColor.clear()
navigationBar.isTranslucent = true
Incidemment, si vous voulez changer la couleur de la barre de navigation, vous pouvez utiliser le même principe:
let redPixel = UIImage(named: "RedPixel")
navigationBar.setBackgroundImage(redPixel, for: UIBarMetrics.default)
navigationBar.shadowImage = redPixel
navigationBar.isTranslucent = false
La solution fournie par @Essence fonctionne parfaitement!
C’est ce que j’utilise même pour créer l’image transparente à 1 pixel par code:
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!
}
}
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