Esta respuesta se relaciona con las preguntas formuladas en los comentarios de la publicación del OP:
Para forzar que una vista aparezca en una orientación determinada, ponga lo siguiente en viewWillAppear:
UIApplication* application = [UIApplication sharedApplication];
if (application.statusBarOrientation != UIInterfaceOrientationPortrait)
{
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
}
Es un truco, pero esto obliga UIViewController
a que se presente en vertical incluso si el controlador anterior era horizontal.
ACTUALIZAR para iOS7
Los métodos anteriores ahora están en desuso, por lo que para iOS 7 use lo siguiente:
UIApplication* application = [UIApplication sharedApplication];
if (application.statusBarOrientation != UIInterfaceOrientationPortrait)
{
UIViewController *c = [[UIViewController alloc]init];
[c.view setBackgroundColor:[UIColor redColor]];
[self.navigationController presentViewController:c animated:NO completion:^{
[self.navigationController dismissViewControllerAnimated:YES completion:^{
}];
}];
}
Curiosamente, en el momento de la escritura, ya sea presente o despedir debe estar animada. Si ninguno de los dos lo está, obtendrá una pantalla en blanco. No tengo idea de por qué esto lo hace funcionar, ¡pero lo hace! El efecto visual es diferente según el que esté animado.