iPad模式视图控制器在关闭时旋转界面

Posted

技术标签:

【中文标题】iPad模式视图控制器在关闭时旋转界面【英文标题】:iPad modal view controller rotates interface on dismiss 【发布时间】:2014-04-17 14:09:06 【问题描述】:

我正在开发的应用程序有问题,如下所示:

应用程序的窗口有一个rootViewController,它设置为UIViewController 的自定义类(MenuViewController)。这个视图控制器有一个自己的rootViewController 属性。无论何时设置都会发生这种情况(代码的真正简短版本):

- (void)setRootViewController:(UIViewControlelr *)rootViewController

    ...
    _rootViewController = rootViewController;
    if (self.rootViewController) 
        [self addChildViewController:rootViewController];
        [self.view addSubview:rootViewController.view];
    
    ...

现在这个MenuViewController 可以在它的rootViewController 之上显示一个模态视图控制器。

我是这样做的:

[self.rootViewController presentModalViewController:viewController animated:YES completition:nil];

到这里为止,一切看起来都还不错。现在在 iPad 上,每当我从模态视图控制器调用 [self.presentingViewController dismissViewControllerAnimated:YES completion:nil] 时,它下方的界面都会旋转到相同的方向(即UIInterfaceOrientationLandscapeLeft),而不管视图控制器出现时的初始方向是什么。

总之,我的视图层次结构是这样的:

Window
   |
   - Menu View Controller
      |
      - Root View Controller
          |
          - Modal view controller

有谁知道我该如何解决这个问题?它不会发生在 iPhone 上。

【问题讨论】:

【参考方案1】:

在我看来,在 iPad 上您的 MenuViewControllerrootViewController 支持多种界面方向,而在 iPhone 上则不支持。这是猜测,因为您对此没有说任何话。

如果是这种情况,并且 rootViewController 确实支持多个界面方向,解决方法是覆盖 - supportedInterfaceOrientations 并返回纵向,这似乎是您所建议的。

【讨论】:

我实际上已经通过实现preferredInterfaceOrientationForPresentation 并返回self.interfaceOrientation 来修复它。如果你问我很奇怪,但它确实完成了工作! :)

以上是关于iPad模式视图控制器在关闭时旋转界面的主要内容,如果未能解决你的问题,请参考以下文章

iPad 模态控制器在旋转后被解散

iPad 模态视图控制器以纵向动作,即使它是横向的

UITabBarController 和模式视图的自动旋转问题

旋转 ipad 屏幕时同时调用滚动功能

如何在 iPad 中自动旋转期间重新排列视图

iPad 应用程序中的旋转