2010-02-02 6 views
6

Desidero visualizzare una vista modale e voglio che copra la barra di stato dell'iPhone.La barra di stato di iPhone scompare quando si visualizza una vista modale?

Ho provato a impostare la proprietà wantsFullScreenLayout del controller modale su SÌ; Ho anche impostato la proprietà dei suoi genitori su SÌ. Questo non funziona, presumibilmente perché la vista modale viene visualizzata sotto il contenuto della finestra principale, che include la barra di stato.

Il mio secondo approccio ha abbandonato l'intera tecnica "wantsFullScreenLayout" in favore di nascondere la barra di stato appena prima che venga visualizzata la vista modale, per poi riaccenderla dopo che la vista modale è stata chiusa. Funziona fino alla fine ... la vista genitore della vista modale è impostata in modo errato (la sua barra di navigazione è parzialmente nascosta dietro la barra di stato). Chiamare - [view setNeedsLayout] non fa nulla.

Come devo affrontare questo problema?

Grazie.

risposta

2

Ti starà volendo il - (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated nella classe UIApplication.

Qualcosa di simile a questo:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 

Questo dovrebbe nascondere la barra di stato con una bella animazione di dissolvenza.

+0

Ho già provato questo (vedere il 2 ° approccio sopra). Non ho problemi a nascondere e riapparire la barra di stato; il problema è avere il layout della vista correttamente una volta che lo faccio ri-apparire. Grazie. –

+0

Ridimensiona semplicemente la vista? Impostare il frame su (0,20,320,460)? – Jasarien

+0

Ha funzionato! Ancora non sono proprio sicuro del motivo per cui devo impostarlo manualmente ... ma grazie! –

12

Unire la discusione tardi, ma penso di poter salvare altri problemi.

Ho un VC diverse spinte in un NavController (chiamiamolo VC il GENITORE). Ora voglio visualizzare uno schermo modale (il BAMBINO) con la barra di navigazione E la barra di stato nascosta. Dopo molti esperimenti, so che questo funziona ...

1) Perché presento il CHILD VC chiamando presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated nel PARENT, la barra di navigazione non è più coinvolta (non è necessario nasconderlo).

2) La vista nel pennino CHILD VC è dimensionata a 320x480.

3) II bambino VC imposta self.wantsFullScreenLayout = YES; in viewDidLoad

4) poco prima di presentare il bambini, nascondere la barra di stato con [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];

5) respingere il FIGLIO VC utilizzando un metodo protocollo delegato nel genitore, e chiama [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:YES]; prima di dismissModalViewControllerAnimated:YES] per assicurarti che la barra di navigazione sia disegnata nella posizione corretta

Spero che questo aiuti.

+0

+1 per 4). L'ho risolto senza altri passaggi e ho visualizzato nuovamente la barra di stato in -viewWillDisappear: nella vista modale. –

+0

funziona brillantemente per me! – Chris

+2

per quanto riguarda il punto 4, la firma del metodo è '- (void) setStatusBarHidden: (BOOL) nascosto con Animazione animazione: (UIStatusBarAnimation)'. hai inviato il secondo argomento a BOOL invece di UIStatusBarAnimation. –