2015-11-05 14 views
5

tenta di nascondere la barra di stato da una vista modale.nascosta in modalità modale (su presentazione a schermo intero)

già verificare diversi metodi:

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

with/without self.setNeedsStatusBarAppearanceUpdate() 

anche

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

ma ammortizzati iOS 9

questo funziona nella presentazione a schermo intero (modale opzione di presentazione segue) ma nota in più di schermo intero quale è il mio ambiente.

se avete qualche idea ..

+0

si prega di verificare http://stackoverflow.com/questions/32808593/setstatusbarhidden-withanimation-deprecated-in-ios- 9, che penso risolva il problema. – geraldWilliam

+0

ciao, grazie ma lo stesso problema. funziona su una presentazione a schermo intero ma non su un'impostazione a schermo intero .. – raphael

+0

Prima di andare a plistare e controllare se l'aspetto della barra di stato basato su controller è impostato su SÌ e impostare prefersStatusBarHidden() che hai provato. – Flipper

risposta

1

Infatti per FullScreen aggiornamento barra di stato chiamato automaticamente, ma non per OverFullScreen.

Inoltre nel mio caso ero necessità di trattare con controller di navigazione in pila, per passare ModalViewController come figlio:

extension UINavigationController { 

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

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

All'interno ModalViewController aggiorniamo manualmente barra di stato, anche al fine di rendere più agevolmente dobbiamo farlo in viewWillDisappear, ma a quel punto visibleViewController ancora ModalViewController, non è rimasto nulla da usare lo stato di bool internoBarHidden e aggiornarlo di conseguenza

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

Per una non a schermo intero presentazione di un controller di visualizzazione, è necessario utilizzare la proprietà modalPresentationCapturesStatusBarAppearance.

ad es.

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

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

Per un fullscreen presentazione di un controller di vista, è necessario:

  1. impostare la nuova VC del modalPresentationStyle.
  2. Override prefersStatusBarHidden nel nuovo VC
  3. impostare la tua applicazione plist UIViewControllerBasedStatusBarAppearance valore su YES

esempio

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

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

(Sì, lo status bar impostazione in iOS è penosamente male. Non c'è da meravigliarsi Stack Overflow ha così tante domande sul tema, e tante varie risposte).

+0

È necessario '.coverVertical? –

0

Se si utilizza uno storyboard e si vuole nascondere/mostrare la barra di stato, è possibile utilizzare questo metodo su precedente controller di vista:

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