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

How to disable landscape orientation on a single view at iOS 7/8

我在常规目标设置中为我的应用程序启用了横向:

一切正常 - 该应用程序可用于所有选定的方向...

现在我想禁用横向模式只有一个视图

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

- (BOOL)shouldAutorotate
{
    return NO;
}


- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

很遗憾没有成功...


编辑:

我的应用程序的结构是:

UITabBarController
    UINavigationController
        UITableViewController
            UIViewController

你把上面的代码放在视图或 NavigationController 的 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;
}