У меня есть относительно сложное универсальное приложение, использующее UISplitViewController и UISegmentedController, и несколько представлений, которые должны быть представлены в ландшафте с использованием presentViewController
. Используя методы, предложенные выше, я смог заставить iPhone ios 5 и 6 работать нормально, но по какой-то причине iPad просто отказался отображаться как альбомный. Наконец, я нашел простое решение (реализованное после нескольких часов чтения, проб и ошибок), которое работает как для устройств, так и для iOS 5 и 6.
Шаг 1) На контроллере укажите требуемую ориентацию (примерно как указано выше)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
NSInteger mask = UIInterfaceOrientationMaskLandscape;
return mask;
}
Шаг 2) Создайте простой подкласс UINavigationController и реализуйте следующие методы.
-(BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
Шаг 3) Представьте свой viewController
vc = [[MyViewController alloc]init];
MyLandscapeNavigationController *myNavigationController = [[MyLandscapeNavigationController alloc] initWithRootViewController:vc];
[self myNavigationController animated:YES completion:nil];
Надеюсь, это кому-то поможет.