6

Ho due UIViewControllers, "A" e "B", dove "A" sostituisce la shouldAutorotateToInterfaceOrientation di tornare SÌ per UIInterfaceOrientationPortrait, e "B" restituisce SI per tutti gli orientamenti. Nel mio esempio "A" è il controller della vista di navigazione di root, quindi utilizzo pushViewController per "B". Dopodiché ruoto il dispositivo in orizzontale, che esegue automaticamente l'autorotazione di "B", quindi faccio clic su "B" (pulsante indietro o tramite popViewController) per tornare a "A".popViewController non AutoRotate torna all'orientamento permesso

Quando si utilizza iPhone OS 3.1.3, "A" torna all'orientamento verticale come previsto. Quando si utilizza iPhone OS 3.2, ho due effetti collaterali:

  1. "A" viene visualizzato in orizzontale.
  2. La barra di spostamento non si aggiorna anche se viene visualizzata la lettera "A". La barra di navigazione mostra ancora gli elementi per "B". Solo dopo aver tentato di tornare indietro/pop un'altra volta, la barra di navigazione si animerà per mostrare gli elementi per "A". Se invece provo a premere di nuovo "B" e a tornare indietro, devo far apparire due volte prima che la barra di navigazione si anima per mostrare gli elementi per "A". Durante questi "intermedi pop" rimane visualizzata la vista per "A".

Mentre la ricerca di questo problema, ho visto altre risposte suggeriscono di eseguire manualmente la rotazione ([UIDevice setOrientation] o tramite un tranformation), tuttavia questo non aiuta a capire quale sia il problema, soprattutto perché si comporta in modo diverso tra la due sistemi operativi.

Quindi la mia domanda è: tutti i miei UIViewControllers sullo stack UINavigationController supportano esattamente gli stessi orientamenti futuri? E se no, allora c'è qualcosa che devo fare per farlo funzionare come ha fatto per OS 3.1.3?

+1

Questo problema si verifica anche in iPhone OS 4.0. – iamj4de

+0

Questo comportamento si verifica sia sul dispositivo che sul simulatore? Ho avuto un problema simile che è successo solo sul simulatore a causa di bug del simulatore. – MrHen

risposta

1

Sembrerebbe che i sistemi operativi più recenti richiedano tutti gli UIViewControllers nello stack UINavigationController per supportare lo stesso insieme di orientamenti.

0

Ho lo stesso problema e ho trovato la risposta su questo collegamento: UINavigationController navigation stack problems in landscape mode uno dei miei controller di vista non è stato restituito Sì su shouldAutorotateToInterfaceOrientation.

+0

Grazie per la tua risposta. Nel mio caso sia "A" che "B" restituiscono valori per shouldAutorotateToInterfaceOrientation, con "A" che restituisce SÌ solo per portrait, poiché è l'unico che supporta. Devo restituire SÌ per un controller di visualizzazione di cui non sono a conoscenza (né A né B)? – JoeGaggler