5

Estoy tratando de pasar de un controlador de vista que admite paisajes (en modo apaisado) a uno que explícitamente no admite (y no debería) paisaje. Estoy haciendo esto de la siguiente manera:Problema pushViewController de Paisaje a Retrato

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait); 
} 

Lo ideal sería que desea que el nuevo viewController que estoy empujando en la pila de comenzar inicialmente en el retrato, no en horizontal. Extrañamente, incluso con este método implementado, comienza en Landscape.

Mi única suposición es que Apple no quiere que un usuario pase de paisaje a retrato (a pesar de que nos permite pasar del paisaje a un controlador anterior que está en el retrato).

Cualquier información y/o ayuda sería muy apreciada.

Respuesta

10

Encontré una manera de forzar el retrato. Es un poco un truco, pero aquí está. En el - (void) viewDidLoad del viewController que desea forzar retrato para hacer lo siguiente:

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentModalViewController:viewController animated:NO]; 
[self dismissModalViewControllerAnimated:NO]; 
[viewController release]; 

Esto obliga básicamente retrato, mediante la presentación de un controlador (que sólo es compatible con el retrato por defecto).

+0

Esto lo hizo para mí pasar de la vista solo vertical a la horizontal solamente a través de pushViewController. Le ahorra tener que llamar a la API privada no documentada [[UIDevice currentDevice] setOrientation: UIDeviceOrientationLandscapeRight] ¡Gracias! – MyCSharpCorner

+0

buen truco ... fue muy útil ... :) – Roshit

4

Deberá presentar su nuevo controlador de vista de manera modal. Si su controlador de vista existe dentro de un controlador de navegación, la orientación de todos los controladores de vista en la pila de navegación está implícita en el controlador de vista raíz en la pila. Cualquiera que sea el retorno de tu controlador de vista raíz en la pila de navegación, shouldAutoRotateToInterfaceOrientation se usa para todos los controladores de vista debajo de él.

+0

Ah veo, esto es lo que supuse era el caso. ¡Gracias por la aclaración! – Sahil

1

La respuesta de Sahil anterior está en desuso desde iOS 6.0. Sin embargo, la siguiente parece hacer el mismo truco:

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentViewController:viewController animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
[viewController release]; 
Cuestiones relacionadas