2012-09-20 2 views
13

Ho la seguente costellazione:Come cambiare la barra di stato modale Viste iOS 6

Vista principale (Custom UIViewController, non navigationController o di navigazione bar), che contiene un pulsante che sfocia modale ad un secondo controller di vista Table, che è incorporato in un controller di navigazione:

MainView -> Navigation controller -> TableView

Sulla MainView barra di stato è Black (nessun cambiamento con iOS 6 - anche quando la barra di stato è impostato per default) Sulla TableViewController la barra di stato dovrebbe avere lo stile predefinito (grigio in iOS 5, Blu e colorato a causa della barra di navigazione in iOS 6).

In iOS 5 questo era facile dalle seguenti linee di codice in TableViewController:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarStyle:)]) { 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
} 

esecuzione di questo sotto iOS 6 rilevando succede. Come posso fare questo? Ho provato tutte le possibili impostazioni della barra di stato sotto il sommario del progetto e in plist (come descritto qui: https://stackoverflow.com/a/12468689/1685971)

Inoltre, nello Storyboard tutto sembra a posto. L'esecuzione l'applicazione in simulatore o sul dispositivo sembra diverso: Storyboard Simulator

risposta

5

provare questo "hack" : Devi aggiungere una barra di navigazione al tuo primo controller di visualizzazione. Allora hai due possibilità.

1) Impostare il valore alfa della barra di navigazione a 0

o

2) Impostare la posizione y della barra per -43px (guardare qui: http://moduscreate.com/tinting-your-status-bar-in-ios6-and-phonegap/)

EDIT:

Per ottenere i colori giusti, è necessario impostare il colore della barra invisibile UINavigationBar. Quindi, per impostazione predefinita, è nero. Nell'azione del pulsante devi impostare tintColor sul tuo navigationController.navigationBar.tintColor. All'azione del tuo pulsante di chiusura devi reimpostarlo su [UIColor blackColor].

+0

imo la colorazione della barra di stato della funzione non è implementata in modo pulito da Apple. La tua soluzione è una soluzione. La soluzione pulita dovrebbe essere che l'app controlli la tinta della barra di stato su ciascun controller di visualizzazione, non solo sul primo controller di visualizzazione. – FrankZp

2

Il primo controller di vista deve avere un controller di navigazione/bar per la funzione di lavorare. La barra di stato non cambia colore nell'app (in iOS6) ma si adatta al colore della barra di navigazione della vista iniziale. Se la tua vista iniziale non contiene una barra di navigazione, la barra di stato non adatta il colore.! (Vedi http://i.stack.imgur.com/n9ubK.png)

+0

Sì questa nuova funzione seleziona il colore della barra di navigazione superiore per colorare la barra di stato. Ma il requisito qui è che il primo View Controller non ha una barra di navigazione.In iOS 5 questo era possibile con il codice sopra. Ma in iOS 6 la barra di stato è immutabile! – FrankZp

+1

_ Sul TableViewController la barra di stato deve avere lo stile predefinito (grigio in iOS 5, blu colorato a causa della barra di navigazione in iOS 6). Questa supposizione è errata. –

+0

Il codice mostrato sopra imposta la barra di stato su TableViewController su Stile predefinito. Funziona su iOS5 - non su iOS6 (la barra di stato rimane nera - vedi screenshot di Simulator). – FrankZp

0

Non è necessario impostare lo stile per la barra di navigazione sul proprio tableviewcontroller.

Prova questo approccio. 1. Aggiungere il controller di navigazione alla vista principale. 2. Impostare la proprietà nascosta su sì. 3. Quando si visualizza tableviewcontroller, impostare la proprietà barra di navigazione nascosta a nessun controller

navigazione -> bar nascosto = yes -> MainView -> bar nascosto = no -> TableView

+0

Il problema è che TableViewController viene visualizzato in modo modale. Pertanto MainViewController e TableViewController non possono essere incorporati nello stesso controller di navigazione (vedere Schermate di Storyboard). Quando si utilizzano due controller di navigazione (uno per MainView e uno per TableView) il problema sopra descritto rimane lo stesso ... – FrankZp