2015-10-16 9 views
14

Lo stile della barra di stato della mia app è UIStatusBarStyleLightContent ed è impostato nel mio rootViewController come preferredStatusBarStyle.SFSafariViewController style bar status

Ora ho un problema che quando si apre SFSafariViewController dalla mia app, ha ereditato lo stile della barra di stato che è leggero e invisibile sullo sfondo bianco di SFSafariViewController.

C'è un modo per impostare lo stile della barra di stato per SFSafariViewController?

P.S. Ho provato a sottoclassi SFSafariViewController e sovrascrivo questo metodo, ma non aiuta.

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleDefault; 
} 

Aggiornamento:

[[UIApplication sharedApplication] setStatusBarStyle:] fa il trucco, ma questo metodo è deprecato in iOS 9.

+0

Sembra che il problema sia apparso perché non ho impostato la chiave di stato della barra di stato basata su uiviewcontroller su YES nel file info.plist. Riscrivo il codice dello stile barra di stato per utilizzare il modo basato sul controller di visualizzazione e tutto funziona perfettamente –

+0

Dovresti segnare la mia risposta come risposta accettata. –

+0

@ClayEllis scusa, mancava al momento. Grazie per la risposta –

risposta

12

Le risposte di cui sopra stanno andando troppo lontano. Non è necessario sottoclasse SFSafariViewController.

Basta impostare modalPresentationCapturesStatusBarAppearance = true sull'istanza di SFSafariViewController e gestirà il resto da solo.

Questo funziona perché il suo valore predefinito preferredStatusBarStyle è, avete indovinato, .default. La gerarchia delle viste si basa ancora sul controller della vista che presenta l'aspetto della barra di stato, quindi impostando modalPresentationCapturesStatusBarAppearance su true, verrà richiesto al ricevitore di visualizzare l'aspetto della barra di stato.

TL; DR

safariViewController.modalPresentationCapturesStatusBarAppearance = true farà il trucco.

+1

Grazie per la soluzione più elegante –

+4

Non sembra funzionare per me ... – Alex

1

Che ne dici?

class MyCustomSafariViewController: SFSafariViewController { 

    override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return .LightContent 
    } 
} 

O API privata - se è possibile utilizzarlo.

+0

Grazie per il suggerimento, ma voglio lo stile scuro della barra di stato. Aggiornato la risposta, provato a sottoclasse ma non funziona. Impossibile utilizzare l'API privata –

+0

restituendo '.Default' non funziona e in realtà' preferredStatusBarStyle' non viene mai chiamato –

+7

Non suggerire mai l'utilizzo di API private. – Simon

6

Non è la soluzione migliore, ma funziona.

class MySafariViewContoller: SFSafariViewController { 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(true) 

     UIApplication.sharedApplication().statusBarStyle = .Default 
    } 

    override func viewWillDisappear(animated: Bool) { 
     super.viewWillAppear(false) 

     UIApplication.sharedApplication().statusBarStyle = .LightContent 
    } 
} 

Modifica .Default e .LightContent come si preferisce.

+0

Una soluzione piacevole, è un modo per mantenere la versione iOS inferiore dell'applicazione a 8.0 e ancora (se l'uso è su 9.0) utilizzare una classe ereditata da 'SFSafariViewController'? –

+0

Ho la mia risposta '@available (iOS 9.0, *) class MySafariViewContoller: SFSafariViewController ' –

+0

Questa soluzione funziona quando la proprietà' UIModalPresentationStyle' è impostata su 'fullScreen', altrimenti andare con la risposta accettata da clay-ellis sopra. – yohannes

4

È possibile utilizzare le estensioni.