Проблема автоматического вращения iOS 6 - поддерживаетсяInterfaceOrientations возвращаемое значение не соблюдается
У меня есть приложение, где у меня есть подкласс UINavigationController
как мой rootViewController
. У меня есть UITableViewController
, который позволяет пользователю редактировать некоторые настройки, он всегда должен находиться в портретном режиме. Мое приложение также должно поддерживать все другие ориентации после того, как я нажимаю компонент MoviePlayer на контроллер навигации.
Подкласс UITableViewController
имеет эту реализацию supportedInterfaceOrientations:
- (NSUInteger)supportedInterfaceOrientations {
LLog();
return UIInterfaceOrientationMaskPortrait;
}
Команда logging сообщает мне, что это фактически вызвано.
Проблема заключается в том, что возвращаемое значение не соблюдается, т.е. экран поворачивается в альбомную ориентацию при включении устройства.
Что делать, чтобы просмотр настроек всегда отображался в портрете, но разрешить изменения ориентации для просмотра видео?
Дополнительная информация: мой подкласс UINavigationController
не переопределяет shouldAutorotate или supportedInterfaceOrientations. Я не реализовал
- (NSUInteger)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window
в моем AppDelegate, и я включил все ориентации в итоговую сводку.
Ответы
Ответ 1
У меня возникла проблема, что некоторые ViewControllers
в стеке навигации поддерживают все ориентации, некоторые только портреты, но контроллер UINavigation
возвращает все поддерживаемые приложениями ориентации, этот маленький взлом помог мне.
@implementation UINavigationController (iOS6OrientationFix)
-(NSUInteger) supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
@end
Ответ 2
Вам также нужно добавить:
- (BOOL)shouldAutorotate {
return NO;
}
и установите поддерживаемые вращения для контроллера представления root в файле plist приложения только portrait
.
Ответ 3
Категория для UINavigationController
не работает для меня. Я не знаю почему. Я решаю свою проблему с такой категорией UIViewController
:
@implementation UIViewController (Orientation)
- (BOOL) shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if ([self isKindOfClass:[PlayerViewController class]])
{
orientations |= UIInterfaceOrientationMaskLandscapeLeft;
orientations |= UIInterfaceOrientationMaskLandscapeRight;
}
return orientations;
}
@end