首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在取消模态视图控制器时,如何保持视图控制器的显示方向?

在取消模态视图控制器时,如何保持视图控制器的显示方向?
EN

Stack Overflow用户
提问于 2014-06-15 12:40:44
回答 9查看 24.8K关注 0票数 33

我有这个应用程序,我正在工作,我需要我的所有视图控制器,但一个在肖像。单一的一个视图控制器,是特别的,我需要它能够旋转到任何方向的手机是在。

要做到这一点,我将以模式(而不是嵌入在NavigationController中)的方式呈现它。

所以(例如)我的结构如下:

  • 窗-肖像
    • 根视图控制器(UINavigationController -肖像)
      • 家庭视图控制器(UIViewController -肖像)
        • 详细视图控制器(UIViewController -肖像)
        • 模态视图控制器(UIVIewController - All)

现在,当我将我的模态视图控制器放在一个景观位置时,我的父视图控制器也会被旋转,即使它不支持这个方向。

应用程序中的所有UIViewControllersUINavigaionControllers都继承了具有以下方法的相同的通用类:

代码语言:javascript
运行
复制
override func supportedInterfaceOrientations() -> Int
{
    return Int(UIInterfaceOrientationMask.Portrait.toRaw())
}

我的模态视图控制器再次重写该方法,它看起来如下:

代码语言:javascript
运行
复制
override func supportedInterfaceOrientations() -> Int
{
    return Int(UIInterfaceOrientationMask.All.toRaw())
}

更新1

看起来这只发生在iOS8 Beta上。有人知道在视图控制器的旋转方面是否有什么变化吗?还是这只是测试版中的一个bug?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-12-19 07:51:36

代码语言:javascript
运行
复制
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if ([self.window.rootViewController.presentedViewController isKindOfClass: [SecondViewController class]])
{
    SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController;

    if (secondController.isPresented)
        return UIInterfaceOrientationMaskAll;
    else return UIInterfaceOrientationMaskPortrait;
}
else return UIInterfaceOrientationMaskPortrait;
}

还有斯威夫特

代码语言:javascript
运行
复制
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {

    if self.window?.rootViewController?.presentedViewController? is SecondViewController {

        let secondController = self.window!.rootViewController.presentedViewController as SecondViewController

        if secondController.isPresented {
            return Int(UIInterfaceOrientationMask.All.toRaw());
        } else {
            return Int(UIInterfaceOrientationMask.Portrait.toRaw());
        }
    } else {
        return Int(UIInterfaceOrientationMask.Portrait.toRaw());
    }

}

有关更多详细信息,请查看此链接

票数 20
EN

Stack Overflow用户

发布于 2014-09-09 13:03:18

我的一个应用程序也有同样的问题,经过几天的实验,我想出了一个不太好的解决方案,但它现在起作用了。我在应用程序委托中使用委托方法application:supportedInterfaceOrientationsForWindow:

我创建了一个测试项目,并将其放入在github上 (包括显示结果的GIF )。

//注意:它不是很快的,但我希望它能帮上忙

票数 7
EN

Stack Overflow用户

发布于 2014-06-28 23:19:10

经过多次实验,我确信这是iOS 8的一个“特性”。

如果你想一想,这是完全合理的,因为它已经出现了很长时间。

  • 在iOS 4中,当在选项卡条控制器和导航控制器中更改视图控制器时,以及在呈现/取消控制器时,可以强制应用程序旋转。
  • 然后,在iOS 6中,不可能强制应用程序旋转,除非出现/取消视图控制器(正如我在许多答案中解释的那样,比如这一个)。
  • 现在,在iOS 8中,我猜想根本不可能强制应用程序旋转(除了发布时)。它可以选择一个特定的方向,所以一旦它在这个方向,它将停留在那里,但它不能强迫应用程序进入该方向。 相反,您的视图控制器应该“适应”。有几个WWDC 2014年的视频集中在“适应”,现在我开始理解这是为什么这是如此重要的原因之一。 编辑:在种子4,它看起来像这个功能(强制旋转在演示和解雇)回来了!
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24229677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档