2012-08-02 32 views

Respuesta

51

Para desactivar orientaciones para una visión particular Controlador, ahora debería anular supportedInterfaceOrientations y 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; 
} 

Si usted está apuntando algo más antiguo que iOS 6, que desea el método shouldAutorotateToInterfaceOrientation:. Al cambiar cuando devuelve sí, usted determinará si rotará a dicha orientación. Esto solo permitirá la orientación vertical normal.

- (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); 
} 

Tenga en cuenta que shouldAutorotateToInterfaceOrientation: ya no se utiliza en IOS 6.0.

+2

Si la vista contr Oller está en un controlador de navegación, luego el controlador de navegación es donde deben implementarse. –

+0

@MrRogers Lo hice, pero no funciona. Ver http://pastebin.com/dLfLLP2j Cada controlador implementa supportedInterfaceOrientations correctamente. El primer controlador de vista se muestra correctamente en vertical incluso cuando la aplicación se inicia desde el dispositivo en la pantalla de inicio en el iPhone Plus. Pero cuando navego a otro controlador, gire el dispositivo hacia adelante y hacia atrás para configurar el otro controlador en horizontal, y vuelva, el primer controlador está ahora en el paisaje. Lo que quiero es que el primer controlador esté en vertical y el segundo sea .all. –

+0

Sugiero relacionar 'NSUinteger' de' supportedInterfaceOrientations' (primera línea de código) a 'UIInterfaceOrientationMask'. Xcode 8 advierte sobre "Tipo de retorno conflictivo en la implementación de 'supportedInterfaceOrientations': 'UIInterfaceOrientationMask' (alias 'enum UIInterfaceOrientationMask') frente a 'NSUInteger' (alias 'unsigned long')" y hace sens. Gracias por su respuesta – GabLeRoux

0

Eliminando el método shouldAutorotateToInterfaceOrientation de su clase también funciona completamente. Si no planea rotar, entonces no tiene sentido tener el método en su clase, mientras menos código, mejor, mantiene las cosas limpias.

+0

Esta respuesta ahora está obsoleta; 'shouldAutorotateToInterfaceOrientation' ha quedado obsoleto durante años. –

+0

@MarkAmery https://developer.apple.com/reference/uikit/uiviewcontroller/1621419-shouldautorotate no tiene un aviso de desaprobación. –

+0

@VaddadiKartick También es un método diferente al mencionado en esta respuesta; No estoy seguro de cuál es tu punto. –

28

Xcode 4 y por debajo

Para aquellos que se lo perdieron: se puede usar la pantalla de configuración del proyecto para fijar orientaciones a lo largo de la aplicación (sin necesidad de reemplazar los métodos en cada controlador):

enter image description here

Es tan simple como alternar las orientaciones de interfaz admitidas. Puede encontrar haciendo clic en su Proyecto en el panel izquierdo> el objetivo de la aplicación> pestaña Resumen.

+0

Esto es obsoleto; la interfaz de usuario es diferente ahora. –

35

Xcode 5 y superiores

  • Haga su proyecto en el Navegador de proyectos, en la barra lateral izquierda para abrir la configuración del proyecto
  • vaya a la pestaña general.
  • Desmarque las opciones que no desee en la sección dede implementación de Información, bajo Orientación Dispositivo

screenshot showing where to click

+1

No puedo anular la selección de Landscape en el mío. Los vuelve a encender de inmediato. Además, si los elimino de Info.plist, los devuelve. – Almo

0

Swift 3 Si usted tiene un navigationController, subclase como este (solo para retrato):

class CustomNavigationViewController: UINavigationController { 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
    } 

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