从iPhone 6 Plus横屏主屏幕进入竖屏模式会导致方向错误。

58
这个问题的实际标题比我能够容纳的要长:在iPhone 6 Plus上启动一个只支持竖屏方向的根视图控制器的应用程序,但其他情况下支持横向方向,在主屏幕处于横向方向时会导致一种僵局状态,即应用程序窗口处于横向方向,但设备处于竖向方向。简而言之,它看起来像这样:

当它应该看起来像这样:

重现步骤:

  1. 运行iOS 8.0的iPhone 6 Plus。

  2. 一个支持除倒置竖屏方向以外所有方向的plist的应用程序。

  3. 应用程序的根视图控制器是UITabBarController。

  4. 所有内容,选项卡控制器及其所有后代子视图控制器都从supportedInterfaceOrientations返回UIInterfaceOrientationMaskPortrait。

  5. 从iOS主屏幕开始。

  6. 将设备旋转到横向方向(需要iPhone 6 Plus)。

  7. 冷启动应用程序。

  8. 结果:界面方向错误。

我想不出其他强制使用纵向方向的方法,除非完全禁用横向方向,但这是不可能的:我们的Web浏览器模态视图控制器需要横向方向。

我甚至尝试了子类化UITabBarController并覆盖supportedInterfaceOrientations以返回仅限纵向的掩码,但这(即使使用上述所有步骤)也无法解决问题。


这是一个链接,指向一个展示该bug的样例项目。



你是否已经向 Radar 提交了一个 bug 报告? - Pichirichi
Justin Miller在Apple论坛上建议如下:“您的信息属性列表应指定您愿意允许应用程序启动的方向(这应该对应于您的初始视图控制器支持的方向)。” - Pichirichi
我很喜欢你提问的方式。我一直在想该如何表达。感谢你帮我度过难关!!! - kirans_6891
13个回答

0

只需在info.plist中删除除所需界面方向(我只需要Portrait)以外的所有支持界面方向,它就能为我工作enter image description here


0

我也遇到了同样的情况,使用 [self.window setFrame:...] 对我没有用。

我发现唯一有效的方法是在 application:didFinishLaunchingWithOptions 的结尾添加以下内容。这会让屏幕闪烁,不太干净和高效。

我在 application:didFinishLaunchingWithOptions 的结尾添加了以下内容:

UIViewController *portraitViewController = [[UIViewController alloc] init];
UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:portraitViewController];
[self.navController presentViewController:nc animated:NO completion:nil];
[self.navController dismissViewControllerAnimated:NO completion:nil];  
[UIViewController attemptRotationToDeviceOrientation];

-1

只需在应用程序委托方法中调用以下代码: [application setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];

实际上,在启动后设备现在是UIInterfaceOrientationPortrait,如果您触摸输入字段,则键盘为纵向布局。


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