web-dev-qa-db-fra.com

comment masquer la barre d'état et la barre de navigation lorsque vous touchez l'appareil

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.

25
Aditya Dharma

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.


#1. Utilisation des propriétés UINavigationControllerhidesBarsOnTap + UIViewControllerprefersStatusBarHidden 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é est false.

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
    }

}

# 2. Utilisation de la méthode UINavigationControllersetNavigationBarHidden(_:animated:) + UIViewControllerprefersStatusBarHidden 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
    }

}

# 3. Utilisation de la méthode UINavigationControllersetNavigationBarHidden(_:animated:) + UIViewControllerprefersStatusBarHidden 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.

111
Imanou Petit

Sur iOS 8 et supérieur, vous pouvez simplement utiliser hidesBarsOnTap :

    navigationController?.hidesBarsOnTap = true
0
Cooliopas