iOS 9 supportedInterfaceOrientations不起作用

时间:2015-09-25 12:18:20

标签: ios objective-c cocoa-touch

我有一个UIViewController,代码如下:

- (BOOL) shouldAutorotate {
     return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

我没有使用UINavigationController。显示此UIViewController时,设备仍将旋转为横向。我的目标是iOS 9,这里有什么问题?

5 个答案:

答案 0 :(得分:33)

所以问题是我在info.plist中定义了允许的方向,这显然会覆盖整个项目中其他任何地方的任何方向。

要解决此问题,我从info.plist中删除了条目,并在项目设置中对其进行了定义。现在一切都按预期工作了。

答案 1 :(得分:23)

我不认为Bryan的答案有效,因为在项目设置中更改方向也会将info.plist更改为@mrhangz评论。

如果问题仅限iOS9,可能是因为iPad中的iOS9新功能称为Split view。默认情况下iOS9启用Split view,特别是iPad设备,请参阅Apple文档{{3 }}。

here split view强制您的应用在采用所有视图后支持所有方向。因此,如果您在info.plist或目标常规设置中设置所有方向支持,则默认情况下支持split view,这将忽略viewController中supportedInterfaceOrientations的方向设置,并支持所有方向。

在撰写文档时,如果您在目标设置中选中Requires full screen,那么您的应用将不支持split view。现在您可以再次控制代码中的方向。 enter image description here

答案 2 :(得分:1)

我尝试了很多解决方案,但正确的解决方案是:

ios 8和9,无需编辑info.plist。

- (BOOL) shouldAutorotate {
 return NO;
 }   



- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return (UIInterfaceOrientationPortrait |  UIInterfaceOrientationPortraitUpsideDown);
 }

possible orientation

UIInterfaceOrientationUnknown

无法确定设备的方向。

UIInterfaceOrientationPortrait

设备处于纵向模式,设备直立,主页按钮位于底部。

UIInterfaceOrientationPortraitUpsideDown

设备处于纵向模式但是上下颠倒,设备竖直放置,主页按钮位于顶部。

UIInterfaceOrientationLandscapeLeft

设备处于横向模式,设备直立,主页按钮位于左侧。

UIInterfaceOrientationLandscapeRight

设备处于横向模式,设备直立,主页按钮位于右侧。

答案 3 :(得分:0)

快速5

以下代码将当前视图控制器锁定为纵向模式,但仍允许其他视图控制器转换为横向模式。我确实相信您必须在项目级别启用所有方向,然后使用此方法将其关闭然后再“关闭”,但是不确定是否有办法将它们重新打开。

private var _orientations = UIInterfaceOrientationMask.portrait
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    get { return self._orientations }
    set { self._orientations = .portrait }
}

可以在这里找到对这一切的更彻底的解释: The supportedInterfaceOrientations method doesn't override any method from its superclass

答案 4 :(得分:0)

为简单起见,对于iPad,如果info.plist中的支持的界面方向(iPad)属性包括所有四个方向,并且 UIRequiresFullScreen 属性值为 NO ,iOS会将您的应用视为支持拆分视图。如果某个应用程序支持拆分视图功能,则至少通过上述方式,您不能禁止其旋转。

我有一个详细的答案here