2012-08-02 5 views

risposta

51

Per disabilitare gli orientamenti per un particolare controller di vista, ora è necessario sostituire supportedInterfaceOrientations e preferredInterfaceOrientationForPresentation.

- (NSUInteger) supportedInterfaceOrientations { 
    // Return a bitmask of supported orientations. If you need more, 
    // use bitwise or (see the commented return). 
    return UIInterfaceOrientationMaskPortrait; 
    // return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; 
} 

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation { 
    // Return the orientation you'd prefer - this is what it launches to. The 
    // user can still rotate. You don't have to implement this method, in which 
    // case it launches in the current orientation 
    return UIInterfaceOrientationPortrait; 
} 

Se ci si rivolge qualcosa di più grande di iOS 6, si desidera che il metodo di shouldAutorotateToInterfaceOrientation:. Cambiando quando ritorna sì, determinerai se ruoterà verso detto orientamento. Ciò consentirà solo il normale orientamento verticale.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

    // Use this to allow upside down as well 
    //return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
} 

Nota che shouldAutorotateToInterfaceOrientation: è stato deprecato in iOS 6.0.

+2

Se il contr vista oller è in un controller di navigazione, quindi il controller di navigazione è dove questi devono essere implementati. –

+0

@MrRogers L'ho fatto, ma non funziona. Vedi http://pastebin.com/dLfLLP2j Ogni controller implementa correttamente le interfacce supportate. Il primo controller di visualizzazione viene visualizzato correttamente in verticale anche quando l'app viene avviata dal dispositivo nella schermata iniziale su iPhone Plus. Ma quando si passa a un altro controller, ruotare il dispositivo avanti e indietro per impostare l'altro controller in orizzontale e tornare indietro, il primo controller è ora in orizzontale. Quello che voglio è che il primo controller sia in verticale e il secondo sia tutto. –

+0

Suggerisco di relazionare 'NSUinteger' da' supportedInterfaceOrientations' (prima riga di codice) a 'UIInterfaceOrientationMask'. Xcode 8 avverte riguardo a "Conflitto del tipo di ritorno nell'implementazione di 'supportedInterfaceOrientations': 'UIInterfaceOrientationMask' (noto anche come 'enum UIInterfaceOrientationMask') rispetto a 'NSUInteger' (alias 'unsigned long')" e rende sens. Grazie per la tua risposta – GabLeRoux

0

La rimozione del metodo shouldAutorotateToInterfaceOrientation dalla classe funziona anche perfettamente. Se non hai intenzione di ruotare, non ha senso avere il metodo nella tua classe, meno codice e meglio è, mantiene le cose pulite.

+0

Questa risposta è ora obsoleta; 'shouldAutorotateToInterfaceOrientation' è stato deprecato per anni. –

+0

@MarkAmery https://developer.apple.com/reference/uikit/uiviewcontroller/1621419-shouldautorotate non ha un avviso di deprecazione. –

+0

@VaddadiKartick È anche un metodo diverso da quello menzionato in questa risposta; Non sono sicuro di quale sia il tuo punto. –

28

Xcode 4 e al di sotto

Per chi si fosse perso lo: è possibile utilizzare la schermata delle impostazioni di progetto per fissare orientamenti in tutta l'applicazione (non c'è bisogno di sostituire i metodi di ogni controller):

enter image description here

È semplice come alternare gli orientamenti dell'interfaccia supportati. Puoi trovarlo facendo clic sul tuo progetto nel riquadro di sinistra> obiettivo dell'app> scheda Riepilogo.

+0

Questo è obsoleto; l'interfaccia utente è diversa ora. –

35

Xcode 5 e superiori

  • Clicca il tuo progetto nel Navigatore progetto nella barra laterale sinistra per aprire le impostazioni del progetto
  • andare alla scheda Generale.
  • deselezionare le opzioni che non si desidera nella sezioneInformazioni Distribuzione, in Orientamento dispositivo

screenshot showing where to click

+1

Non riesco a deselezionare Paesaggio sul mio. Li riavvia immediatamente. Inoltre, se li cancello da Info.plist, li rimette indietro. – Almo

0

Swift 3 Se si dispone di un navigationController, sottoclasse in questo modo (per il ritratto solo):

class CustomNavigationViewController: UINavigationController { 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
    } 

    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { 
    return UIInterfaceOrientation.portrait 
    } 
}