iOS 6自动轮换问题 - supportedInterfaceOrientations返回值不受尊重

时间:2012-09-23 15:50:04

标签: iphone objective-c ipad ios6 autorotate

我有一个应用程序,我有一个UINavigationController子类作为我的rootViewController。我有一个UITableViewController让用户编辑一些设置,它应该始终处于纵向模式。将MoviePlayer组件推送到导航控制器后,我的应用程序还需要支持所有其他方向。

UITableViewController子类具有supportedInterfaceOrientations的实现:

- (NSUInteger)supportedInterfaceOrientations {
    LLog();
    return UIInterfaceOrientationMaskPortrait;
}

logging命令告诉我实际调用它。

问题是没有遵守返回值,即当我转动设备时屏幕变为横向。

如何使设置视图始终以纵向显示,但允许更改视频查看器的方向?

更多信息:我的UINavigationController子类不会覆盖shouldAutorotate或supportedInterfaceOrientations。我还没有实现

   - (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window
AppDelegate 中的

方法,我已在目标摘要中启用了所有方向。

3 个答案:

答案 0 :(得分:17)

我遇到的问题是导航堆栈中的某些ViewControllers支持所有方向,有些只是纵向,但UINavigation控制器正在返回所有应用程序支持的方向,这个小黑客帮助了我。

@implementation UINavigationController (iOS6OrientationFix)

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

@end

答案 1 :(得分:2)

您还需要添加:

- (BOOL)shouldAutorotate {
    return NO;
}

并将应用程序plist文件中 root 视图控制器支持的旋转设置为仅portrait

答案 2 :(得分:2)

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