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ć.
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 jestfalse
.
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.
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
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