webentwicklung-frage-antwort-db.com.de

statusleiste in der Modalansicht ausgeblendet (über Vollbilddarstellung)

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

10
raphael

Für eine Nicht-VollbildDarstellung eines View Controllers müssen Sie die Eigenschaft modalPresentationCapturesStatusBarAppearanceverwenden.

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:

  1. legen Sie den neuen VCs modalPresentationStylefest.
  2. Überschreiben Sie prefersStatusBarHiddenim neuen VC
  3. setzen Sie den Wert für UIViewControllerBasedStatusBarAppearanceIhrer App-Plist auf YES

z.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.)

42
Womble

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
}
1
Vadim Pavlov

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
}
1
bnussey

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)
}
0
kikettas