文章目錄
  1. 1. 场景
  2. 2. 解决
  3. 3. 参考

场景

程序只有一个简单的ViewController,要求启动后只横版显示,不能旋转。我设置了一下Info.plist中的支持方向后,在ViewController.m中加入如下代码:

1
- (BOOL)shouldAutorotate {
    return NO;
}

结果shouldAutorotate不调用,程序该旋转还是旋转。

解决

这种问题一般出在粗心,或者是iOS 9的分屏应用中。我的问题在于没有针对设备设置好Info.plist。只限制了Universal的方向,在iPad设备中却允许所有方向。

可以采用以下两种方式之一解决:

  1. 正确设置设备的允许方向:TARGETS -> General -> Deployment InfoDevices 设置为iPad, 再将 Device Orientation下勾选 Landscape Left 和 Landscape Right。

    我先前在Devices设置为Universal时限制了方向,而Devices为iPad时,每个方向都是被勾选的。这个时候就允许了所有方向,shouldAutorotate函数在没有禁止分屏的情况下是不会被调用的。

  2. 设置全屏显示(禁止分屏):TARGETS -> General -> Deployment InfoRequires full screen 勾选。

    苹果论坛中说,当开发分屏应用时也就放弃了对屏幕旋转的控制。这里虽然不是分屏应用,但显性要求全屏显示,可以让就算在支持所有方向的情况下,shouldAutorotate函数也会被调用。

参考

文章目錄
  1. 1. 场景
  2. 2. 解决
  3. 3. 参考