2013-08-12 17 views
9

Il mio rootViewController è un UITabbarController e contiene UINavigationController s.Perché la barra di stato ruota e la vista rimane ritratto

Per limitare la rotazione, poiché iOS6, in alcune ma non tutte le visualizzazioni, ho sottoposto a sottoclassi entrambi questi controller per rispettare la risposta shouldAutorotate della loro vista superiore o visibile.

Tutto questo funziona perfettamente ... il più delle volte.

In un caso, a partire da una vista (UITableviewController) che non consente la rotazione.

Spingo una vista che autorizza la rotazione, ruota in orizzontale e poi torna in verticale.

Poi, quando apro la vista, tutto appare bene.

Ma ora, se si ruota il dispositivo, la barra di stato ruota da sola, lasciando uno spazio vuoto nella parte superiore e coprendo una parte del lato sinistro della vista corrente. La vista corrente non ruota (come non dovrebbe). Solo la barra di stato ruota, avanti e indietro. La vista rimane reattiva, riceve tocchi e funziona normalmente, non ridimensiona o risponde alla rotazione in alcun modo (come non dovrebbe).

Questo comportamento continua fino a quando non uccido e riavvio l'app. Quando succede, non ho trovato altro modo per farlo smettere. Al riavvio tutto funziona di nuovo correttamente e funzionerà correttamente per una durata indeterminata. Posso sedermi lì spingendo, scoppiando, ruotando avanti e indietro sul mio cuore senza problemi.

Non sono mai stato in grado di ricreare questo nel simulatore.

Succede senza motivo apparente, non posso farlo accadere. Direi l'85% delle volte che funziona correttamente. Pensavo di averlo corretto molte volte quando non si verificava per giorni o addirittura settimane. Poi, di punto in bianco, succede di nuovo.

Non riesco a trovare un post in nessun forum che descriva questo comportamento, quindi non trovo nemmeno un punto di partenza per il debug. Come potrebbe oscillare la barra di stato da cima a parte e la vista non viene ridimensionata o ruotata o non risponde in alcun modo. Se sapessi come farlo accadere, avrei un punto di partenza.

+0

Il problema riguarda l'orientamento del dispositivo (FaceUp, faceDown e orientamento sconosciuto) che non è possibile impostare nel simulatore. Ma sul dispositivo è possibile ottenere questo orientamento. Stampa l'orientamento del dispositivo e, quindi, puoi provare a eseguire il debug. – Bharath

risposta

6

Ho riscontrato lo stesso problema durante l'aggiunta di una sottoclasse UIWindow (nel mio caso, una sovrapposizione della barra di stato).

La soluzione era quella di impostare il rootViewController di questo nuovo UIWindow a una sottoclasse UIViewController che avevano -(BOOL)shouldAutorotate implementato. Questo impediva alla barra di stato di ruotare quando non era previsto.

+0

Non sto alterando la barra di stato in alcun modo, quindi non credo che questo si applica. Non ho ancora riscontrato questo problema ora che ho aggiornato per iOS7. Con un po 'di fortuna, è stata un'anomalia con iOS6 e posso cancellare "fisso". –

+0

Ho riscontrato questo problema quando utilizzo una libreria Lookback. Aggiunge UIWindow aggiuntivo alla classe UIApplication. Ho implementato una sottoclasse 'UIViewController' e ho sovrascritto' shouldAutorotate'. funziona come un fascino. – Loozie