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 ответа:
Вы должны убедиться, что вы добавляете правильно
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];
Автоматическая ориентация поворота снова включена!