So blenden Sie die Statusleiste und die Navigationsleiste aus, wenn Sie auf das Gerät tippen, z. B. Fotos im iPhone?
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)
aber es funktioniert nicht.
Bearbeiten : Ich möchte Statusleiste und Navigationsleiste ein- und ausblenden, nicht dauerhaft ausblenden.
Mit Swift 4 und iOS 11 können Sie je nach Bedarf einen der drei folgenden Codeausschnitte auswählen, um Ihr Problem zu lösen.
UINavigationController
hidesBarsOnTap
sowie der Eigenschaften UIViewController
prefersStatusBarHidden
und preferredStatusBarUpdateAnimation
Seit iOS 8 verfügt UINavigationController
über eine hidesBarsOnTap
-Eigenschaft. hidesBarsOnTap
hat folgende Deklaration :
var hidesBarsOnTap: Bool { get set }
Ein boolescher Wert, der angibt, ob der Navigations-Controller das Ausblenden seiner Balken mithilfe einer Tippen-Geste zulässt.
Apple sagt auch über hidesBarsOnTap
:
Wenn der Wert dieser Eigenschaft
true
ist, ändert der Navigationscontroller das Ausblenden und Anzeigen der Navigationsleiste und der Symbolleiste als Reaktion auf ein ansonsten nicht behandeltes Antippen im Inhaltsbereich. Der Standardwert dieser Eigenschaft istfalse
.
Der folgende Code zeigt, wie hidesBarsOnTap
implementiert wird:
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:)
method + UIViewController
prefersStatusBarHidden
und preferredStatusBarUpdateAnimation
mit einer UIButton
UINavigationController
hat eine Methode namens setNavigationBarHidden(_:animated:)
. setNavigationBarHidden(_:animated:)
hat die folgende Deklaration :
func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
Legt fest, ob die Navigationsleiste ausgeblendet ist.
Der folgende Code zeigt, wie Sie Ihre Status- und Navigationsleiste umschalten, indem Sie setNavigationBarHidden(_:animated:)
mit einer UIButton
im Storyboard setzen und mit einem @IBAction
verknüpfen:
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:)
method + UIViewController
prefersStatusBarHidden
und preferredStatusBarUpdateAnimation
mit einer UIGestureRecognizer
Alternativ zum vorherigen Code können Sie setNavigationBarHidden(_:animated:)
mit einer UIGestureRecognizer
anstelle einer UIButton
verwenden:
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
}
}
Sehen Sie diese Antwort für eine ähnliche Frage , wenn Sie iOS 10 als Ziel festlegen möchten.
Unter iOS 8 und höher können Sie einfach hidesBarsOnTap verwenden:
navigationController?.hidesBarsOnTap = true