2008-11-24 13 views
16

Mi aplicación es bastante simple: se inicia con un controlador de vista que contiene una vista de tabla (en el diseño de vista agrupada) con algunas opciones. Cuando el usuario toca una de las opciones, presiono otro controlador de vista en mi controlador de navegación.¿Cómo forzar una orientación de pantalla en controladores de vista específicos?

Este segundo controlador de vista simplemente muestra un UIImageView, y el usuario puede cambiar la orientación de la pantalla en este controlador de vista entre modos de retrato/paisaje. Esto funciona bien y todo está feliz.

Sin embargo, si el usuario toca el botón "Atrás" en la barra de navegación mientras está en el modo horizontal, la distribución del primer controlador está completamente desordenada. Véase más abajo para antes/después de capturas de pantalla:

before http://pessoal.org/shot1.jpg after http://pessoal.org/shot2.jpg

Cualquier pistas sobre cómo forzar el primer controlador de vista (segunda pantalla en este post) para permanecer dentro de la orientación de la pantalla retrato?

Respuesta

2

No parece haber una manera de hacerlo utilizando los métodos documentados.

he presentado un error para esto: rdar: // 6399924

"No hay manera de restringir siempre una UIViewController a una orientación"

Se puede ver en el radar abierto (junto con una enlace al ejemplo de código para reproducir el problema) aquí: http://openradar.appspot.com/radar?id=697

+2

Esta respuesta es a partir de 2008. Ahora tiene solución [aquí] (http://blog.typpz.com/2010/02/12/iphone-programming-how-to-force-your -app-to-run-in-landscape-mode /) solía bloquear la orientación. –

+0

Como siempre en Stack Overflow, si tiene una solución mejor/más actualizada que la aceptada, publíquela adecuadamente para que podamos actualizar la respuesta aceptada. – lfalin

-1

No pude hacer que funcionara como quería. Debería poder establecer una orientación particular para un ViewController, pero el NavigationController no parece hacer siempre lo correcto.

Integré el rediseño de mis pantallas para que funcionen en cualquiera de las dos orientaciones. Eso podría ser un trabajo extra, pero se "siente" más natural, de todos modos.

0

Como alguien en el radar abierta sugirió, una solución es desactivar el botón "atrás", mientras que en la no-retrato:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    // don't let user press "back" button in landscape - otherwise previous view and the rest of the application 
    // will also be in landscape which we did not feel like testing yet 
    self.navigationController.navigationBarHidden = (UIInterfaceOrientationPortrait != self.interfaceOrientation); 
} 
0

Hay una solución para hacer eso: es usar un controlador de vista y agregar su vista a la ventana. luego en ese controlador forzarás el paisaje en el shouldAutorotate ... method. Funciona bien, pero asegúrese de que sea necesario para que su proyecto lo use, porque no es muy inteligente obligar al usuario a encender su iPhone. Por cierto, aquí hay un código de ejemplo si lo necesitas.

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

Cuestiones relacionadas