ios 6.0 — Пейзаж не работает — подкласс UINavigationController никогда не вызывает метод shouldAutorotate

Я создал простое приложение с красным фоном и кнопкой на нем (для понимания этой проблемы). Приложение находится в ландшафтном режиме и строится на платформе 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;
 }

Я видел бесчисленное количество ответов на подобные вопросы, которые я реализовал, но обнаружил, что они не работают. Спасибо.


person Zigglzworth    schedule 25.10.2012    source источник


Ответы (1)


Разве вы не должны делать это:

[self.window setRootViewController:navigationController];

вместо:

[self.window setRootViewController:navigationController.topViewController];

person rocky    schedule 25.10.2012
comment
Ага. Это именно то, что я должен был делать. Спасибо :) - person Zigglzworth; 26.10.2012