2015-01-03 11 views
6

ho un comportamento molto strano:Barra di stato tiene nascosto dopo respingere vista modale e appare dopo alcuni secondi

Ho un app con controller di navigazione (barra di navigazione) in cui la barra di stato è visibile. Poi vi presento un controller della vista (scanner di codici a barre utilizzando la fotocamera) modale dove voglio nascondere la barra di stato, quindi ho implementato:

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

Quando chiudo la vista modale presentata utilizzando

self.dismissViewControllerAnimated(true, completion: nil) 

la vista scompare e la barra di stato rimane nascosta, anche se il RootViewController implementa

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

Ma dopo qualche secondo il la barra di stato appare automaticamente !?

ho una soluzione qui a StackOverflow che ho provato:

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade) 
self.dismissViewControllerAnimated(true, completion: nil) 

ma questo non ha cambiato nulla per me.

Forse posso fare un aggiornamento nella rootview in viewDidAppear ??

+1

Hai guardato 'setNeedsStatusBarAppearanceUpdate '? – jrturton

+0

Ehi fratello, ho esattamente lo stesso problema e ho provato tutte le funzioni per forzare la barra di stato a comparire. Hai trovato una soluzione alla fine? –

+0

Purtroppo no :( –

risposta

2

probabilmente è necessario chiamare setNeedsStatusBarAppearanceUpdate sul controller della vista:

chiamate questo metodo se gli attributi barra di stato del controller della vista, come ad esempio lo stato nascosto/unhidden o lo stile, il cambiamento. Se si chiama questo metodo all'interno di un blocco di animazione, le modifiche vengono animate insieme al resto del blocco di animazione.

In genere, questo è fatto in viewDidLoad, ma nel tuo caso è probabilmente meglio farlo in viewDidAppear dal vostro punto di vista è già caricato e si sta congedando una vista più in basso nella gerarchia vista. Prova questo:

override func viewDidAppear(animated: Bool) { 
    self.setNeedsStatusBarAppearanceUpdate() 
} 
+2

Purtroppo questo non ha risolto il mio problema :( –

8

Stai forse chiamando dismissViewControllerAnimated da un thread in background?

Se è così, provare avvolgendo la chiamata (e qualsiasi altro chiamate a UIKit in quanto non è thread-safe) in una chiamata GCD torna alla coda principale in questo modo:

dispatch_async(dispatch_get_main_queue()) { 
self.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

DispatchQueue.main.async in Swift 3 –

Problemi correlati