10

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

UITableViewController子类具有supportedInterfaceOrientations的这种实现:

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

日志记录命令告诉我这实际上是被调用的。

问题是不尊重返回值,即当我转动设备时屏幕变为横向。

我该怎么做才能使设置视图始终以纵向显示但允许视频查看器的方向更改?

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

   - (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window

我的AppDelegate中的方法,并且我已启用目标摘要中的所有方向。

4

3 回答 3

17

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

@implementation UINavigationController (iOS6OrientationFix)

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

@end
于 2012-09-23T21:31:54.570 回答
2

您还需要添加:

- (BOOL)shouldAutorotate {
    return NO;
}

并将app plist 文件中视图控制器支持的旋转设置为 only portrait.

于 2012-09-23T19:27:02.940 回答
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
于 2012-12-05T15:04:41.700 回答