2015-11-05 5 views
14

I have a UITabViewController ->UINavigationController ->UIViewController e desidera nascondere e mostrare lo statoBar. quando chiamo setNeedsStatusBarAppearanceUpdate() il metodo prefersStatusBarHidden non viene chiamato.preferisceStatusBarHidden non chiamato

func fadeOutStatusBar (notification: NSNotification) { 
    statusBarHidden = true 
    self.setNeedsStatusBarAppearanceUpdate() 
} 

func fadeInStatusBar (notification: NSNotification) { 
    statusBarHidden = false 
    self.setNeedsStatusBarAppearanceUpdate() 
} 

override func prefersStatusBarHidden() -> Bool { 
    return statusBarHidden 
} 
+1

Questo ha discusso in così tante volte in OS. vedi [questo] (http://stackoverflow.com/questions/18059703/cannot-hide-status-bar-in-ios7) – Jamil

+0

solo la risposta accettata è l'opposto del mio – Md1079

+0

@ Md1079, perché la tua domanda non era molto chiaro - sembrava che stavi chiedendo come farlo in una sola visione, così la maggior parte delle persone ti ha dato delle soluzioni per modificare solo una vista, mentre Nghia Luong ha risposto con entrambe le opzioni che potrebbero aiutare. – Natalia

risposta

15

Capito. nel file Info.plist: vista Aspetto barra di controllore di stato deve essere impostata su YES

+4

Questo non sembra funzionare in iOS 9.3.1 simulatore – adib

+3

La tua risposta qui sarebbe più utile se spiegassi più dettagliatamente che cosa otterrà la barra di stato Local Hiding? Globalmente in tutta l'app? (FYI la tua risposta mostra come farlo globalmente - mentre la tua domanda iniziale sembra chiedere come farlo per 'una vista') Questo è confuso e poco chiaro. Penso che dovresti accettare la risposta di Nghia per questa domanda. – Natalia

+0

Sì, consente ai viewcontrollers di gestire la barra di stato. Altrimenti, il delegato non viene mai chiamato. – Medhi

27

In primo luogo, View controller-based status bar appearance nel file .plist deve essere impostato su YES .

  • Se si desidera barra di stato per essere nascosto in app tutta:

Per Objective-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [application setStatusBarHidden:YES]; 

    return YES; 
} 

per SWIFT:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { 
    application.statusBarHidden = true 

    return true 
} 
  • Se volete barra di stato è scomparso in Specificare View Controller, in .m di file, basta implementare:

Per Objective-C:

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 

Per Swift:

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

Per Swift 3: 'application.setStatusBarHidden (vero, con: .none)' e 'esclusione var prefersStatusBarHidden: Bool { \t \t return true} \t' – neave

+1

ho dimenticato il plist, Grazie! –

7

per SWIFT 3, prima, fare in modo che View controller-based status bar appearance è impostato su YES nel file plist Info

screenshot

E poi basta aggiungere questo al vostro controller della vista:

override var prefersStatusBarHidden: Bool { 
    get { 
     return true 
    } 
} 

Spero che questo aiuta le persone in futuro.

3

Forse non è una soluzione al problema dell'OP, ma quello che potrebbe anche essere la causa della chiamata prefersStatusBarHidden è se si è utilizzata una seconda finestra nel delegato dell'app, ad esempio per visualizzare una schermata iniziale e non si è nascosto dopo che è stato mostrato lo splash, allora quella finestra ottiene gli eventi che portano a chiamare queste funzioni.