versuchen Sie, die Statusleiste aus einer modalen Ansicht auszublenden.
Überprüfen Sie bereits mehrere Methoden:
override func prefersStatusBarHidden() -> Bool {
return true
}
with / without self.setNeedsStatusBarAppearanceUpdate()
ebenfalls
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade)
aber in iOS 9 abgeschrieben
dies funktioniert in der Vollbilddarstellung (modale Segue-Präsentationsoption). Beachten Sie jedoch die Einstellung im Vollbildmodus.
wenn sie eine idee haben ..
Für eine Nicht-VollbildDarstellung eines View Controllers müssen Sie die Eigenschaft modalPresentationCapturesStatusBarAppearance
verwenden.
z.B.
toViewController.modalTransitionStyle = .coverVertical
toViewController.modalPresentationStyle = .overFullScreen
toViewController.modalPresentationCapturesStatusBarAppearance = true
fromViewController.present(toViewController,
animated: true,
completion: nil)
Für eine VollbildPräsentation eines View Controllers müssen Sie:
modalPresentationStyle
fest.prefersStatusBarHidden
im neuen VCUIViewControllerBasedStatusBarAppearance
Ihrer App-Plist auf YESz.B.
toViewController.modalTransitionStyle = .coverVertical
toViewController.modalPresentationStyle = .fullScreen
fromViewController.present(toViewController,
animated: true,
completion: nil)
(Ja, die Statusleisteneinstellung in iOS ist erbärmlich schlecht. Es ist kein Wunder, dass Stack Overflow so viele Fragen zu diesem Thema und so viele verschiedene Antworten hat.)
Tatsächlich wird die Aktualisierung der Statusleiste für FullScreen
automatisch aufgerufen, jedoch nicht für OverFullScreen
.
Außerdem musste ich mich in meinem Fall mit dem Navigationscontroller im Stack befassen, um ModalViewController als Kind zu übergeben:
extension UINavigationController {
public override func childViewControllerForStatusBarHidden() -> UIViewController? {
return self.visibleViewController
}
public override func childViewControllerForStatusBarStyle() -> UIViewController? {
return self.visibleViewController
}
}
Innerhalb von ModalViewController aktualisieren wir die Statusleiste manuell, auch um das reibungslos zu gestalten, müssen wir das in viewWillDisappear
tun, aber an diesem Punkt visibleViewController
still ModalViewController ist nichts übrig, als den internen Bool statusBarHidden zu verwenden und ihn zu aktualisieren entsprechend
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.statusBarHidden = true
self.setNeedsStatusBarAppearanceUpdate()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.statusBarHidden = false
self.setNeedsStatusBarAppearanceUpdate()
}
override func prefersStatusBarHidden() -> Bool {
return self.statusBarHidden
}
Um die Statusleiste auszublenden, wenn Sie einen Vollbildmodus verwenden, müssen Sie dies in viewDidLoad einstellen:
override func viewDidLoad() {
super.viewDidLoad()
modalPresentationCapturesStatusBarAppearance = true
}
Führen Sie dann die Standardmethode aus, um die Statusleiste auszublenden:
override var prefersStatusBarHidden: Bool {
return true
}
Wenn Sie ein Storyboard verwenden und die Statusleiste ein-/ausblenden möchten, können Sie diese Methode für den vorherigen View-Controller verwenden:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none)
}