2012-10-24 15 views
5

tl; dr: Layout dell'interfaccia utente interrotto quando si ruota l'iPad mentre si scatta una foto, se l'app visualizza una barra di stato.Problemi di layout e barra di stato con UIImagePickerController dopo la rotazione

Ho un'app che mostra una barra di stato che dovrebbe scattare foto attraverso un UIImagePickerController.

Io corro questo su un iPad 3, iOS 6 con Xcode 4,51

Il primo problema che ho notato è che se io non nascondo il tramite di stato

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

prima della chiamata a

[self presentViewController:imagePicker animated:YES completion:nil]; 

Quindi lo UIImagePickerController non verrà visualizzato correttamente sullo schermo. Lo spazio per la barra di stato sarebbe ancora riservato (ma non sono mostrati tempo o informazioni sulla batteria, ecc.) Con il risultato che i controlli all'estremità inferiore dello schermo sarebbero parzialmente fuori schermo.

Così, ho aggiunto la linea

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

prima di presentare la UIImagePickerController e il primo problema è stato risolto.

Ora arriva il secondo problema (causato dalla soluzione al primo problema). Quando apro lo UIImagePickerController, ruoto l'iPad e lo chiudo (tramite "cancella" o "usa", non importa), il gestore (viene chiamato imagePickerControllerDidCancel o imagePickerController:didFinishPickingMediaWithInfo:, in cui mostro nuovamente la barra di stato, tramite

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

il problema ora è che la barra di stato viene visualizzato in effetti, ma il resto della app sembra non essere a conoscenza che è sullo schermo di nuovo. (L'UIToolbar che ho sul mio "MainViewController" è in parte nascosto dietro la barra di stato.) La cosa interessante è che, se ruoto l'iPad su qualsiasi altro orientamento, tutto viene visualizzato di nuovo correttamente dopo l'animazione.

Qualcuno può darmi qualche consiglio su come risolvere è un problema? (Attualmente il mio miglior lavoro sarebbe quello di lasciare la barra di stato nascosta dopo che la prima volta qualcuno ha scattato una foto, ma è una specie di sub-ottimale). Forse c'è una soluzione migliore al primo problema, o forse un metodo per risolvere entrambi i problemi.

Ulteriori informazioni: Dopo aver ruotato l'iPad in orizzontale mentre era attivo UIImagePickerController, questo è il frame del frame di visualizzazione del mio MainViewController: {{0, 0}, {1024, 768}} (cioè nel caso in cui vi sia il problema). Quando ho l'iPad in orientamento orizzontale tutto il tempo, questo è il frame di visualizzazione del MainViewController dopo che lo UIImagePickerController è stato eliminato: {{0, 0}, {1024, 748}} (Questo è il caso in cui non ci sono problemi.)

Grazie in anticipo per la vostra attenzione e impegno!

risposta

3

Ho appena incontrato lo stesso problema su iPhone quando si visualizza un raccoglitore di immagini che riprende un'immagine dalla fotocamera. La soluzione che ho trovato è stata effettuare una chiamata per mostrare la barra di stato quando riapparirà la vista che ha fatto scattare il selettore di immagini. Per esempio.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; 
} 
+0

Grazie, questo è già parte della soluzione. Ora l'app sembra corretta dopo che ho lasciato il selettore di immagini.Ma ora c'è un nuovo problema: quando ruoto il dispositivo, la barra di stato salta alla posizione corretta (in alto) ma il resto della mia app non ruota e rimane di lato ... Hai risolto anche tu questo problema? –

+0

La mia app è di tipo ritratto, quindi non ho riscontrato questo problema. Se trovi una soluzione, postala qui per farla vedere agli altri. – Firefly

+0

non funziona affatto – user2159978