场景
程序只有一个简单的ViewController,要求启动后只横版显示,不能旋转。我设置了一下Info.plist
中的支持方向后,在ViewController.m
中加入如下代码:
- (BOOL)shouldAutorotate {
return NO;
}
结果shouldAutorotate不调用,程序该旋转还是旋转。
解决
这种问题一般出在粗心,或者是iOS 9的分屏应用中。我的问题在于没有针对设备设置好Info.plist
。只限制了Universal的方向,在iPad设备中却允许所有方向。
可以采用以下两种方式之一解决:
- 正确设置设备的允许方向: 在TARGETS -> General -> Deployment Info 将 Devices 设置为iPad, 再将 Device Orientation下勾选 Landscape Left 和 Landscape Right。
我先前在Devices设置为Universal时限制了方向,而Devices为iPad时,每个方向都是被勾选的。这个时候就允许了所有方向,shouldAutorotate函数在没有禁止分屏的情况下是不会被调用的。
- 设置全屏显示(禁止分屏): 在TARGETS -> General -> Deployment Info 将 Requires full screen 勾选。
苹果论坛中说,当开发分屏应用时也就放弃了对屏幕旋转的控制。这里虽然不是分屏应用,但显性要求全屏显示,可以让就算在支持所有方向的情况下,shouldAutorotate函数也会被调用。