【问题标题】:How to disable landscape orientation on a single view at iOS 7/8如何在 iOS 7/8 的单个视图上禁用横向
【发布时间】:2015-03-14 18:16:43
【问题描述】:

我在一般目标设置下为我的应用启用了横向:

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

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

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

- (BOOL)shouldAutorotate
{
    return NO;
}


- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

可惜没有成功……


编辑:

我的应用的结构是:

UITabBarController
    UINavigationController
        UITableViewController
            UIViewController

【问题讨论】:

  • 这个视图是否嵌入在导航控制器中?
  • @JoshGafni 是的,它是一个子视图...

标签: ios ios7 ios8 orientation autorotate


【解决方案1】:

上面的代码是放在视图的ViewController还是NavigationController?你需要把它放在导航控制器中,否则导航控制器会旋转,导致视图也旋转。子类 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;
}

【讨论】:

  • 感谢您的快速回复!将您的代码添加到 NavigationController - 但什么也没发生...我将我的应用程序结构添加到问题中 - 也许有问题?
  • 我在 shouldAutorotate 函数中添加了一个断点,如果我打开 tableview(在选项卡中),它不会被调用...
  • 其实坚持一下。你到底想发生什么。您是否希望选项卡旋转,但其中的视图不旋转?你想让导航栏也旋转吗?
  • 我有不同的选项卡,里面是一些表格视图,表格视图下方是普通视图控制器......“普通”应用程序应该旋转,但表格视图下方的一些“子视图”应该不是……
  • 但我想当您查看“普通视图控制器”时,选项卡和导航栏仍然在屏幕上可见。如果“普通视图控制器”在屏幕上,您是否希望它们也不要旋转?
猜你喜欢
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多