如何在iOS 7/8上禁用单个视图上的横向方向

时间:2015-03-14 18:16:43

标签: ios ios7 ios8 orientation autorotate

我在常规目标设置下为我的应用启用了横向方向: enabled landscape orientations

这一切都运转良好 - 该应用程序可用于所有选定的方向......

现在我想在仅一个视图停用横向模式。

我在特定的视图控制器上尝试了以下操作:

- (BOOL)shouldAutorotate
{
    return NO;
}


- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

不幸的是没有成功......


修改:

我的应用程序的结构是:

UITabBarController
    UINavigationController
        UITableViewController
            UIViewController

1 个答案:

答案 0 :(得分:1)

您是否将上面的代码放在View或ViewController的ViewController中?您需要将其放在导航控制器中,否则导航控制器将旋转,导致视图也旋转。子类UINavigationController并覆盖shouldAutoRotate:

- (BOOL)shouldAutorotate
{
    id currentViewController = self.topViewController;

    if ([currentViewController isKindOfClass:[ViewController class]])
        return NO;

    return YES;
}

因此,只有当显示的视图是您不想旋转的视图时,导航控制器才会旋转。

修改

UITabBarController内部:

- (BOOL)shouldAutorotate
{

    if([self.selectedViewController isKindOfClass:[UINavigationController class]]){

        UINavigationController *navigationController = (UINavigationController *) self.selectedViewController;
        id currentViewController = navigationController.topViewController;

        if ([currentViewController isKindOfClass:[ViewController class]])
            return NO;
        }
    }
    return YES;
}