【问题标题】:iOS 8 vs iOS 7 AutorotationiOS 8 与 iOS 7 自动旋转
【发布时间】:2014-10-02 02:34:42
【问题描述】:

这是一个简单的单视图控制器应用程序:

    - (void)viewDidLoad
    {
      [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

      self.view.backgroundColor = [UIColor greenColor];
     }


    - (BOOL)shouldAutorotate
    {
       return YES;
    }

    - (NSUInteger)supportedInterfaceOrientations
   {
        return UIInterfaceOrientationMaskLandscapeRight;
   }

iOS 8 中的输出是如此不同。

这与 iOS 8 与 iOS 7 上 UIWindow 边界的差异有关。如何获得类似 iOS 7 的行为?

【问题讨论】:

  • 您的视图控制器是作为关键窗口的窗口的根视图控制器吗?
  • Zev,我遇到了完全相同的问题,我确实有一个视图控制器被设置为根视图控制器。您对此了解更多吗?
  • 另一个这样的question 已经得到了here 的答复。

标签: uiviewcontroller ios8 ios7.1 uiwindow autorotate


【解决方案1】:

这似乎是 Xcode 6 或 iOS 8 中的错误。从 xib 切换到情节提要后,问题消失了。

【讨论】:

    【解决方案2】:

    在 IOS8 中,可能的方向列表应该在 Info.plist 文件中,方法 shouldAutorotate 默认返回 YES。

    看看下面的讨论和文档:

    https://*.com/a/24467576/3330421

    UIKit 参考: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/supportedInterfaceOrientations

    当用户改变设备方向时,系统调用这个 根视图控制器或最顶层呈现的视图上的方法 填充窗口的控制器。如果视图控制器支持 新方向,窗口和视图控制器旋转到新的方向 方向。仅当视图控制器的 shouldAutorotate 方法返回 YES。

    重写此方法以报告视图的所有方向 控制器支持。视图控制器的默认值 支持的界面方向设置为 用于 iPad 的 UIInterfaceOrientationMaskAll 和 iPhone 惯用语的 UIInterfaceOrientationMaskAllButUpsideDown。

    系统与视图控制器支持的方向相交 应用程序支持的方向(由 Info.plist 确定 文件或应用委托的 应用程序:supportedInterfaceOrientationsForWindow:方法)到 判断是否旋转。

    【讨论】: