Tengo tres ViewControllers configurados para manejar tres vistas. El problema que tengo es que en el simulador la orientación es LandscapeRight (que es lo que quiero), y la primera vista se muestra correctamente en esa vista horizontal, pero cuando me muevo a la segunda y tercera vista, aparecen giró 90 grados en sentido antihorario con la esquina superior izquierda de la vista en la esquina inferior izquierda de la pantalla del teléfono. He estado tratando de depurar esto durante unos días y el más cercano que he estado de una pista que está trazando la siguiente manera:Solo la primera vista agregada de UIView addSubview muestra la orientación correcta
El siguiente es en applicationDidFinishLaunching mi aplicación de delegado:
NSLog(@"1");
[window addSubview:welcomeController.view];
NSLog(@"2");
[window addSubview:goalController.view];
NSLog(@"3");
[window addSubview:planningController.view];
NSLog(@"4");
[window bringSubviewToFront:welcomeController.view];
NSLog(@"5");
cada uno de mis ViewControllers implementar algo similar a lo siguiente (el único cambio es el nombre del controlador de conmutación en la cadena pasada a NSLog):
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
NSLog(@"called for WelcomeController");
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
con eso, me sale el siguiente salida en la consola:
a
called for WelcomeController
called for WelcomeController
called for WelcomeController
called for WelcomeController
2
called for GoalController
3
called for PlanningController
4
5
Me resulta interesante que shouldAutorotateToInterfaceOrientation se llame 4 veces para la primera vista que se agrega, mientras que las otras dos solo se llaman una vez. Supongo que esto se debe probablemente a que primero tiene que configurarse (y creo que el simulador comienza en modo vertical, por lo que podría estar llamándolo mientras hacía la rotación), pero la correlación me parece un poco sospechosa.
He cambiado el orden para que addSubview se llame primero para el goalController y welcomeController para el segundo. En este caso, es el goalController el que se muestra en la orientación correcta del paisaje (normalmente es el controlador de bienvenida). Esto parece eliminar mis archivos XIB y ViewControllers. No estoy seguro de por qué la primera vista donde se llama addSubview es especial. También intenté usar insertSubview en el índice 0 con los mismos resultados.
Esto no parece haber ayudado mi código. Traté de hacer llamadas tanto para goalController como para planningController antes y después de las correspondientes llamadas addSubview (incluso intenté cambiar las 300 y 480;) Parece que hace la diferencia en algunos puntos porque, en lugar de tener la vista de bienvenida en el fondo de la parte de la pantalla que no está cubierta, es simplemente blanca, así que creo que debe ser algo que se extiende por la pantalla. –
Una cosa que noté de su publicación es que parece tener una vista de tabla que se muestra en modo vertical, dejando la derecha aproximadamente en 1/3 de la página en blanco. Obtengo lo mismo, excepto que mi vista se gira 90 grados, por lo que lo que debería ser la parte superior apunta hacia la izquierda. –
Diseñé todo en IB con la orientación horizontal, que puede ser el motivo por el que las cosas apuntan hacia el lado correcto, pero no ocupan toda la pantalla. Empecé con la ventana principal, con viewControllers y las vistas, todas están en el paisaje. Al igual que usted, si cambio el orden de mis controladores de vista, entonces, el que sea primero, no necesita la llamada a setFrame. – mahboudz