【问题标题】:Why Status Bar rotates and view remains portrait为什么状态栏旋转并且视图仍然是纵向的
【发布时间】:2013-08-12 14:58:19
【问题描述】:

我的 rootViewController 是 UITabbarController 并包含 UINavigationControllers。

为了限制旋转,从 iOS6 开始,在一些但不是所有的视图上,我将这两个控制器子类化以尊重它们最顶层或可见视图的 shouldAutorotate 响应。

这一切都完美无缺……大多数时候。

在一种情况下,从不允许旋转的视图 (UITableviewController) 开始。

我推送了一个允许自动旋转的视图,旋转到横向然后返回纵向。

然后当我弹出视图时,一切看起来都很好。

但是现在如果我旋转设备,状态栏会单独旋转,在顶部留下一个空白区域并覆盖当前视图左侧的一部分。当前视图不旋转(因为它不应该)。只有状态栏来回旋转。视图保持响应,接收触摸并正常工作,不会以任何方式调整大小或响应旋转(因为它不应该)。

这种行为一直持续到我终止并重新启动应用程序。一旦它发生,我就找不到其他方法让它停止。重新启动后,一切都会再次正常工作,并将在不确定的时间内正常工作。我可以坐在那里推、弹、来回旋转,心满意足,没有任何问题。

我一直无法在模拟器中重新创建它。

它没有明显的原因发生,我无法让它发生。我会说 85% 的时间它都能正常工作。我以为我已经修复了很多次,但几天甚至几周都没有发生。然后,它又出其不意地再次发生。

我在任何论坛中都找不到描述这种行为的帖子,所以我什至找不到开始调试的地方。状态栏怎么会从上到下摆动,并且视图不会调整大小或旋转或以任何方式响应。如果我知道如何做到这一点,我就会有一个开始的地方。

【问题讨论】:

  • 问题在于无法在模拟器中设置的设备方向(FaceUp、faceDown 和未知方向)。但是,在设备上,您可以获得此方向。打印设备方向,然后就可以尝试调试了。

标签: iphone ios autorotate uistatusbar


【解决方案1】:

我在添加子类 UIWindow(在我的例子中是状态栏覆盖)时遇到了同样的问题。

解决方案是将这个新的UIWindowrootViewController 设置为已实现-(BOOL)shouldAutorotate 的子类UIViewController。这可以防止状态栏在不应该旋转时旋转。

【讨论】:

  • 我不会以任何方式更改状态栏,因此我认为这不适用。现在我已经为 iOS7 更新了,我还没有遇到过这个问题。幸运的是,iOS6 出现了一些异常情况,我可以将其注销为“已修复”。
  • 我在使用 Lookback 库时遇到了这个问题。它向 UIApplication 类添加了额外的 UIWindow。我实现了一个UIViewController 子类并覆盖shouldAutorotate。像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多