Я создал простое приложение с красным фоном и кнопкой на нем (для понимания этой проблемы). Приложение находится в ландшафтном режиме и строится на платформе iOS6.
Я установил свойства pList Поддерживаемые ориентации интерфейса только для: Пейзаж (правая кнопка «Домой»)
Если я помещу методы -(BOOL)shouldAutorotate и -(NSUInteger)supportedInterfaceOrientations в контроллер представления и инициирую его как Windows rootViewController БЕЗ использования UINavigationController, тогда будет достигнута альбомная ориентация.
ОДНАКО, если я использую подкласс UINavigationController, как в приведенном ниже примере, и реализую -(BOOL)shouldAutorotate и -(NSUInteger)supportedInterfaceOrientations , альбомная ориентация НЕ достигается, а -(BOOL)shouldAutorotate никогда не вызывается.
У меня есть следующий код в моем подклассе UINavigationController:
//For iOS 5.x and below
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationLandscapeRight);
}
//For iOS 6.0
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
-(BOOL)shouldAutorotate
{
return YES;
}
В моем appDelegate у меня есть следующие методы:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
viewController = [[MDViewController alloc] init]; //a very simple viewcontroller containing button on red background which should be in landscape mode
navigationController = [[MDNavigationController alloc] initWithRootViewController:viewController];
[self.window setRootViewController:navigationController.topViewController];
[self.window makeKeyAndVisible];
return YES;
}
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow: (UIWindow *)window {
return UIInterfaceOrientationMaskLandscapeRight;
}
Я видел бесчисленное количество ответов на подобные вопросы, которые я реализовал, но обнаружил, что они не работают. Спасибо.