2015-11-05 10 views
5

versuchen, die Statusleiste aus einer modalen Ansicht auszublenden.Statusleiste in modaler Ansicht (über Vollbilddarstellung) ausgeblendet

bereits prüfen mehrere Methoden:

override func prefersStatusBarHidden() -> Bool { 
    return true 
} 

with/without self.setNeedsStatusBarAppearanceUpdate() 

auch

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade) 

aber abgeschrieben in iOS 9

diese im Vollbild-Präsentation funktioniert (modal segue Präsentation Option), aber beachten Sie in über Vollbild Das ist meine Einstellung.

, wenn Sie eine Idee haben, ..

+0

Bitte überprüfen http://stackoverflow.com/questions/32808593/setstatusbarhidden-withanimation-deprecated-in-ios- 9, die ich denke, adressiert Ihr Problem. – geraldWilliam

+0

Hallo, danke, aber das gleiche Problem. funktioniert auf Vollbild-Präsentation, aber nicht auf Vollbild-Einstellung. – raphael

+0

Zuerst gehen Sie zu plisten und prüfen Sie, ob View-Controller-basierte Statusleiste Aussehen auf YES gesetzt ist und setzen Sie prefersStatusBarHidden(), die Sie versucht haben. – Flipper

Antwort

1

Tat für FullScreen Statusleiste Update automatisch aufgerufen, aber nicht für OverFullScreen.

Außerdem in meinem Fall war ich brauche mit Navigationssteuerung in Stapel beschäftigen, ModalViewController als Kind weitergeben müssen:

extension UINavigationController { 

    public override func childViewControllerForStatusBarHidden() -> UIViewController? { 
     return self.visibleViewController 
    } 

    public override func childViewControllerForStatusBarStyle() -> UIViewController? { 
     return self.visibleViewController 
    } 
} 

Innen ModalViewController wir manuell Statusleiste, auch aktualisieren, um es zu machen, glatt müssen wir das in viewWillDisappear tun, aber an diesem Punkt visibleViewController immer noch ModalViewController, nichts übrig, als interne bool statusBarHidden zu verwenden und es entsprechend zu aktualisieren

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 
} 
30

Für eine nicht vollständige Präsentation eines View Controllers müssen Sie die modalPresentationCapturesStatusBarAppearance Eigenschaft verwenden.

z.B.

toViewController.modalTransitionStyle = .coverVertical 
toViewController.modalPresentationStyle = .overFullScreen 
toViewController.modalPresentationCapturesStatusBarAppearance = true 

fromViewController.present(toViewController, 
      animated: true, 
      completion: nil) 

Für eine Vollbild Präsentation eines View-Controller, müssen Sie:

  1. modalPresentationStyle den neuen VC eingestellt.
  2. Überschreibung prefersStatusBarHidden im neuen VC
  3. setzen Ihre App plist UIViewControllerBasedStatusBarAppearance Wert auf YES

z.B.

toViewController.modalTransitionStyle = .coverVertical 
toViewController.modalPresentationStyle = .fullScreen 

fromViewController.present(toViewController, 
      animated: true, 
      completion: nil) 

(Ja, Statusleiste Einstellung in iOS ist erbärmlich schlecht. Es ist kein Wunder, Stack-Überlauf so viele Fragen zum Thema hat, und so viele verschiedene Antworten.)

+0

Ist '.coverVertical' notwendig? –

0

Wenn Sie ein Storyboard verwenden und Sie wollen sich verstecken/die Statusleiste anzeigen, können Sie diese Methode auf vorherigen view-Controller verwenden:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none) 
} 
Verwandte Themen