Comment masquer la barre d’état et la barre de navigation lorsque j’appuie sur l’appareil, comme des photos dans un iphone?
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)
mais ça ne marche pas.
Modifier : Je voudrais masquer et afficher la barre d'état et la barre de navigation, pas le masquer de manière permanente.
Avec Swift 4 et iOS 11, en fonction de vos besoins, vous pouvez sélectionner l’un des trois extraits de code suivants afin de résoudre votre problème.
UINavigationController
hidesBarsOnTap
+ UIViewController
prefersStatusBarHidden
et preferredStatusBarUpdateAnimation
Depuis iOS 8, UINavigationController
a une propriété hidesBarsOnTap
. hidesBarsOnTap
a la suivante déclaration :
var hidesBarsOnTap: Bool { get set }
Valeur booléenne indiquant si le contrôleur de navigation autorise le masquage de ses barres à l'aide d'un geste.
Apple a également déclaré à propos de hidesBarsOnTap
:
Lorsque la valeur de cette propriété est
true
, le contrôleur de navigation bascule le masquage et l'affichage de sa barre de navigation et de sa barre d'outils en réponse à un tapement non géré dans la zone de contenu. La valeur par défaut de cette propriété estfalse
.
Le code suivant montre comment implémenter hidesBarsOnTap
:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.hidesBarsOnTap = true
}
override var prefersStatusBarHidden: Bool {
return navigationController?.isNavigationBarHidden == true
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
}
UINavigationController
setNavigationBarHidden(_:animated:)
+ UIViewController
prefersStatusBarHidden
et preferredStatusBarUpdateAnimation
avec un UIButton
UINavigationController
a une méthode appelée setNavigationBarHidden(_:animated:)
. setNavigationBarHidden(_:animated:)
a la suivante déclaration :
func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
Définit si la barre de navigation est masquée.
Le code suivant montre comment basculer entre la barre d'état et la barre de navigation à l'aide de setNavigationBarHidden(_:animated:)
avec une variable UIButton
définie dans le story-board et liée à un @IBAction
:
import UIKit
class ViewController: UIViewController {
// Link this @IBAction to a `UIButton`
@IBAction func toggle(_ sender: UIButton) {
navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
}
override var prefersStatusBarHidden: Bool {
return navigationController?.isNavigationBarHidden == true
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
}
UINavigationController
setNavigationBarHidden(_:animated:)
+ UIViewController
prefersStatusBarHidden
et preferredStatusBarUpdateAnimation
avec un UIGestureRecognizer
Comme alternative au code précédent, vous pouvez utiliser setNavigationBarHidden(_:animated:)
avec un UIGestureRecognizer
au lieu d'un UIButton
:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.toggle))
view.isUserInteractionEnabled = true
view.addGestureRecognizer(gesture)
}
@objc func toggle() {
navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
}
override var prefersStatusBarHidden: Bool {
return navigationController?.isNavigationBarHidden == true
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
}
Consultez cette réponse pour une question similaire si vous devez cibler iOS 10.
Sur iOS 8 et supérieur, vous pouvez simplement utiliser hidesBarsOnTap :
navigationController?.hidesBarsOnTap = true