Come stabiliamo l’orientamento dell’app in iOS 8?

In iOS 7 abbiamo detto:

// ViewController1: -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } -(BOOL)shouldAutorotate { return YES; } // ViewController2, presented by modal segue from button in ViewController1 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } -(BOOL)shouldAutorotate { return YES; } 

Il risultato è stato che l’app appariva in orizzontale nel controller di visualizzazione 1 e in verticale nel controller di visualizzazione 2.

Questo codice funziona perfettamente con iOS 7, inclusi i simulatori iOS 7 in Xcode 6. Ma non funziona più su iOS 8. Ci sono due problemi:

  • La vista del Controller 1 appare in orizzontale, ma il simulatore non ruota automaticamente (potrebbe essere solo un bug del simulatore) e (questa è la parte veramente importante) la vista non viene automaticamente ridimensionata, quindi è troppo stretta per lo schermo ( c’è una grande area nera alla sua destra).

  • La vista del Controller 2 appare nello stesso orientamento della vista di View Controller 1 (orizzontale, non verticale).

Pertanto, le visualizzazioni del controller non vengono ridimensionate automaticamente per riempire lo schermo e gli orientamenti supportati dal controller di visualizzazione presentato non vengono rispettati.

Quindi come dovremmo fare ora? Ha a che fare con le collezioni di tratti? Con dimensioni del contenuto preferite? Con l’impostazione manuale dell’orientamento della barra di stato?

La risposta alla prima parte (lancio in orizzontale) è invariata da iOS 7: tutto dipende dall’ordine dei possibili orientamenti nel file Info.plist. Quindi, diciamo che View Controller 1 dice questo:

 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

Quindi, in modo coerente, avvieremo in orizzontale se l’orientamento orizzontale viene prima negli orientamenti dell’interfaccia supportati da Info.plist:

 UISupportedInterfaceOrientations  UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait  

Un cambiamento degno di nota in iOS 8 è che per impostazione predefinita la barra di stato è nascosta quando siamo in orizzontale. Ma puoi prevenirlo, se lo desideri, con l’override appropriato:

 -(BOOL)prefersStatusBarHidden { return NO; } 

Ciò non risponde alla seconda parte della mia domanda, che è come forzare la rotazione quando viene presentato un controller di visualizzazione. Come ho spiegato in questa risposta , la mia sensazione è che questo diventerà imansible in iOS 8. Il tuo controller di visualizzazione e le tue visualizzazioni dovrebbero “adattarsi” – e così anche tu.

EDIT: Sembra che nel seed 4 sia in atto la possibilità di forzare la rotazione delle app su presentazione / licenziamento del controller di visualizzazione!

Il problema è probabilmente nel tuo file * .plist

Verifica e quello che vuoi è elencare l’orientamento di default / primo lancio per uno schermo come

Orientamenti dell’interfaccia supportati:

item 0 Landscape (tasto home destro)

elemento 1 Ritratto (pulsante Home in fondo)

Questo “insetto” l’ho inseguito per giorni prima di aver finalmente controllato il lavoro UIInterface nella ricerca globale in Xcode e ho notato che stavo elencando gli orientamenti che il mio gioco non supporta (L’intero gioco è al 100% Landscape Right)

Mi sono sbarazzato di Landscape Left che è stata la causa del lancio di GameCenter in rotazione a Landscape Left se ho tenuto fisicamente il dispositivo in orientamento Landscape Left.

Problema risolto.