jak ukryć pasek stanu i pasek nawigacji po dotknięciu urządzenia

Jak ukryć pasek stanu i pasek nawigacji, gdy dotknę urządzenia jak zdjęcia w iPhonie? Użyłem

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)
Ale to nie działa.

Edit: chciałbym ukryć i pokazać pasek stanu i pasek nawigacji, a nie trwale go ukryć.

Author: Qantas 94 Heavy, 2014-10-09

2 answers

W Swift 4 i iOS 11, w zależności od potrzeb, możesz wybrać jeden z trzech poniższych fragmentów kodu, aby rozwiązać swój problem.


#1. Za pomocą UINavigationController hidesBarsOnTap nieruchomość + UIViewController prefersStatusBarHidden i preferredStatusBarUpdateAnimation Właściwości

Od iOS 8, UINavigationController ma właściwość hidesBarsOnTap. hidesBarsOnTap ma następującą deklarację :

var hidesBarsOnTap: Bool { get set }

Wartość logiczna wskazująca, czy Kontroler nawigacyjny umożliwia ukrywanie swoich pasków za pomocą gestu stuknięcia.

Jabłko również o hidesBarsOnTap:

Gdy wartość tej właściwości wynosi true, Kontroler nawigacyjny włącza ukrywanie i Pokazywanie swojego paska nawigacyjnego i paska narzędzi w odpowiedzi na nieobsługiwane stuknięcie w obszarze zawartości. Domyślną wartością tej właściwości jest false.

Poniższy kod pokazuje jak zaimplementować 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. Za pomocą UINavigationController setNavigationBarHidden(_:animated:) metoda + UIViewController prefersStatusBarHidden i preferredStatusBarUpdateAnimation Właściwości o UIButton

UINavigationController ma metodę nazwane setNavigationBarHidden(_:animated:). setNavigationBarHidden(_:animated:) ma następującą deklarację :

func setNavigationBarHidden(_ hidden: Bool, animated: Bool)

Ustawia, czy pasek nawigacji jest ukryty.

Poniższy kod pokazuje, jak przełączać pasek stanu i pasek nawigacji za pomocą setNavigationBarHidden(_:animated:) z UIButton ustawionym w Storyboardzie i połączonym z @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. Za pomocą UINavigationController setNavigationBarHidden(_:animated:) metoda + UIViewController prefersStatusBarHidden i preferredStatusBarUpdateAnimation Właściwości o UIGestureRecognizer

Jako alternatywę dla poprzedniego kodu, możesz użyć setNavigationBarHidden(_:animated:) z UIGestureRecognizer zamiast 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
    }

}

Zobacz tę odpowiedź na podobne pytanie jeśli chcesz kierować iOS 10.

 108
Author: Imanou Petit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-03 15:55:10

Na iOS 8 i nowszych możesz po prostu użyć hidesBarsOnTap :

    navigationController?.hidesBarsOnTap = true
 0
Author: Cooliopas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-08 19:49:01