强制iOS 7横屏和自动旋转

11

我的应用程序应该只支持横屏,而在构建 iOS 6 及更早版本时,我没有遇到任何问题。 现在使用 iOS 7 时,它根本不会旋转。

在我的应用设置中,我将其设置为仅支持左/右横屏。 在我的视图控制器中,我正在使用以下代码:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

我以前也用过这个,但现在已经不推荐使用了:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return UIInterfaceOrientationIsLandscape(orientation);
}
新的似乎是shouldAutorotate,但使用它会导致我的应用程序崩溃。有关此问题的任何想法将不胜感激,因为我的iPad和模拟器上都被强制保持竖屏。谢谢!

我们能否在输出窗口中获得错误信息? - Jageen
由于某些原因,我无法获取异常。 "po $r0" 给出了 "无法实现结构体:无法读取寄存器 r0 的值"。 - ultra
这里也有同样的问题,但没有崩溃。我无法强制应用程序仅在横向模式下运行。它总是自动旋转。在iOS6中一切正常。 - gdm
你解决了你的方向问题吗?@ultra - Ganesh G
是的,我自己回答了这个问题,然后忘记要回来接受它。 我发布的答案对我有效。 - ultra
4个回答

12

这解决了我的问题。我不确定为什么之前会有问题,但我一定是错过了尝试这个确切的组合(另外,info.plist应该设置支持的方向)。

(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

(BOOL)shouldAutorotate {
    return YES;
}

更新:我可能在模拟器方面遇到问题,重置/重新启动和清除可能有助于解决问题。


我没能让你的答案起作用,但在IRC上与某人聊天后,我的答案成功了。它说我必须等到明天才能接受我的答案。 - ultra
不,这并不能解决问题。https://dev59.com/x3nZa4cB1Zd3GeqPqnsm - openfrog

4
请在您的代码中添加此方法:
```html

也要在您的代码中包含这个方法:

```
- (BOOL)shouldAutorotate{
  if([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft ||[[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight)
  {
    return YES;
  }
  else{
    return NO;
  }
}

阅读此文了解更多信息。文中指出,我们应该重写 shouldAutorotate 来禁用旋转。

如果您想临时禁用自动旋转,请避免修改方向掩码来实现。相反,重写顶层视图控制器上的 shouldAutorotate 方法。此方法会在执行任何自动旋转之前调用。如果返回 NO,则旋转将被禁止。


我的 supportedInterfaceOrientations 的使用正确吗?现在,当我使用 shouldAutorotate 时它不会崩溃(谢谢),但是当我使用 supportedInterfaceOrientations 时会崩溃。我尝试打印错误信息,结果得到“无法实现结构体:无法读取寄存器r0的值”。 - ultra
是的,你正在正确使用那个函数。再做一件事,在你的项目构建设置中,只支持左右横屏模式。 - Puneet Sharma
我也尝试过了。横屏左右,不支持竖屏。但是我仍然遇到了异常情况,我找到了如何显示异常信息:应用程序的支持方向与设备方向没有共同点,并且 shouldAutorotate 的返回值为 YES。针对这个问题,我得到的答案告诉我要做的正是我已经在做的事情,所以我很茫然。我想知道是否与我的 XCode 5 版本有关。 - ultra
另外,如果我将支持的方向更改为UIInterfaceOrientationMaskAll,则不会出现异常和旋转。 - ultra
根据错误信息,我们只在设备处于横屏模式时返回了“YES”,因此我不理解错误原因。请清除/构建您的代码,然后检查。有时候XCode无法读取更改。 - Puneet Sharma
我已经找到了解决方案并发布了答案。 - ultra

1

我不知道为什么,但这在我的IOS 7上有效。

[[UIApplication sharedApplication] setStatusBarHidden:NO];

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

[super willRotateToInterfaceOrientation:UIInterfaceOrientationPortrait duration:0];

0
我可能在模拟器方面遇到了问题,重置/重新启动并清理可能有助于解决问题。
这对我有用:(模拟器->重置内容和设置...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接