【问题标题】:ios7 presenting view controller does not rotate when presenting, causing status bar to disappearios7呈现视图控制器呈现时不旋转导致状态栏消失
【发布时间】:2014-07-21 06:50:47
【问题描述】:

我有一个带有主视图控制器的 iPad 应用程序,它的顶部有一个状态栏和导航栏。

当我旋转这个主视图时 - 一切都很好。 但是,当我展示一个模态(全屏)视图控制器并在其展示时旋转设备时,会发生这种情况:

  1. 呈现的视图控制器按预期旋转。

  2. 关闭时,主视图仍处于呈现时的方向(错误的方向),但状态栏位于顶部(就像只有状态栏被旋转一样)。

    李>
  3. 在玩了一会儿设备之后,方向改变了,但现在状态栏顶部没有 20px 的边距 - 它现在与导航栏重叠,看起来很糟糕。

对造成这种奇怪情况的原因有什么想法吗?

编辑:不使用 UINavigationController 可以防止状态栏与导航栏重叠问题,但旋转问题仍然存在。

【问题讨论】:

  • 你能提供一些与演示相关的代码吗?您是使用一种标准的模态过渡样式还是进行自定义过渡?
  • 模态展示风格为 UIModalTransitionStyleCrossDissolve。这里没有什么习惯

标签: ios objective-c ipad ios7 screen-rotation


【解决方案1】:

如果不可见,视图方向通常不会自动更新。您可以在 viewWillAppear 上手动设置方向。

This link 应该会让你走上正轨。

【讨论】:

    【解决方案2】:

    来自 UIViewController 类参考:

    当可见视图控制器发生旋转时, willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:, 和 didRotateFromInterfaceOrientation:方法在调用过程中被调用 回转。 viewWillLayoutSubviews 方法也是在 视图由其父级调整大小和定位。如果视图控制器是 发生方向变化时不可见,然后旋转 方法永远不会被调用。但是,viewWillLayoutSubviews 方法 当视图变得可见时调用。您对此的实施 方法可以调用statusBarOrientation方法来判断 设备方向。

    因此,您可以使用viewWillLayoutSubviews 方法根据当前的statusBarOrientation 旋转您的presentingViewController。我还没有测试过这段代码,但是这样的东西应该可以让你开始:

    - (void)viewWillLayoutSubviews {
        [self willRotateToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] duration:0];
        [self willAnimateRotationToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] duration:0];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多