Tengo un UINavigationController con dos UIViewControllers en él (A y B). Desde A, presiono B en la pila. Luego, el usuario reorienta el dispositivo. Necesito mover algunas cosas alrededor de la pantalla (botones, etc.) para que sean visibles en la nueva orientación en A.Cambios en la orientación de UIViewController en una pila UINavigationController
Me parece que se debe llamar a -Autorizar a la orientación de la interfaz tanto en A como en B (y devolver SÍ). Pero la -will/-didRotateFromInterfaceOrientation solo se llamará en el ViewController visible (B). Cuando B sale de la pila, A se muestra con la nueva orientación (correcta) pero sin mover los botones según sea necesario.
Para solucionar esto, me encuentro implementar el siguiente patrón:
en el archivo de cabecera:
@interface A : UIViewController {
// ...
UIInterfaceOrientation layoutOrientation;
}
// ...
- (void)orientationChanged;
@end
en el archivo .m:
- (void)viewDidLoad {
// ...
layoutOrientation = self.interfaceOrientation;
}
- (void)viewWillAppear:(BOOL)animated {
// ...
if (layoutOrientation != self.interfaceOrientation) {
[self orientationChanged];
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self orientationChanged];
}
- (void)orientationChanged {
// move my buttons
layoutOrientation = self.interfaceOrientation;
}
Esencialmente, estoy comprobando ver si la orientación cambió en -visualizarAparece y hacer el trabajo para actualizar la IU allí si es necesario. Funciona muy bien, pero esto parece (a) tedioso, y (b) una gran cantidad de código duplicado entre mis diversas clases como A. Puedo arreglar (b) moviendo el código a una superclase común, pero esto todavía parece algo No debería tener que hacer.
¿Hay una forma mejor de mover mis botones en las vistas que no son de lo más alto en la pila de navegación? Mis puntos de vista provienen de .xibs si hay algo en IB que necesito verificar. ¿Debo simplemente diseñar mis vistas de forma que no necesiten mover los botones cuando cambie la orientación?
Gracias!
Mike, tengo una situación similar. Pero, en mi método orientationChanged tengo algunos cálculos que dependen del marco de vista. El marco de visualización por orientación se establece debido a la máscara de aumento automático y en la vista Aparecerá: el marco de visualización no está configurado para una nueva orientación. Por lo tanto, mi cálculo está yendo mal. Pero no puedo manejar este cálculo en viewDidAppear ya que el usuario puede observar las transiciones de los elementos de la UI (calculado). – spd