UINavigationController внутри UITabBarController не будет вращаться в iOS 6


У меня есть UINavigationController внутри UITabBarController. Я перепробовал все, что сообщество предлагает относительно авторотации в iOS 6 без успеха, наконец, я решил создать Категорию для UINavigationController, которая не внесла никаких изменений в oriantaion (хотя функции действительно вызывались)

Введите описание изображения здесь

Затем я создал категорию для UITabBarController следующим образом:

#import "UITabBarController+ios6Rotate.h"

@implementation UITabBarController (ios6Rotate)

-(BOOL)shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortraitUpsideDown;;
}

@end

И получил вот что:

Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'preferredInterfaceOrientationForPresentation must return a supported interface orientation!

Но все мои ориентации таковы: поддерживали?! хмм

Затем я изменил код на следующий:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortraitUpsideDown;
}

И это запустило мое приложение вверх ногами, но по-прежнему не будет вращаться. Я не понимаю, что происходит. На данный момент я хотел бы видеть любую ротацию в ios6, мне все равно, в какую сторону, но ничего не работает.

2 2

2 ответа:

Вы должны убедиться, что вы добавляете правильно supportedInterfaceOrientations. Вы можете попробовать вызвать соответствующие методы ориентации viewController в вашей категории.

Например, в категории UINavigationController это было бы так

-(BOOL)shouldAutorotate
{  
  return   [self.topViewController shouldAutorotate];   
}

-(NSUInteger)supportedInterfaceOrientations
{
   return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
   return [self.topViewController preferredInterfaceOrientationForPresentation];
}

Мне потребовалось несколько часов, чтобы понять это. Это и есть решение проблемы.: По какой-то причине программист previos сделал что-то вроде этого:

 [window addSubview:[someController view]];  // In the appDelegate

Все, что мне нужно было сделать, это заменить его следующим:

  [self.window setRootViewController:someController];

Автоматическая ориентация поворота снова включена!