ios7呈现视图控制器在呈现时不旋转,导致状态栏消失

时间:2014-07-21 06:50:48

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

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

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

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

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

  3. 稍微使用设备后,方向会改变到应有的状态,但现在状态栏顶部没有20px的边距 - 它现在与导航栏重叠,看起来很糟糕。

  4. 有关导致这种奇怪情况的任何想法?

    编辑:不使用UINavigationController会阻止statusBar重叠导航栏问题,但旋转问题仍然存在。

2 个答案:

答案 0 :(得分:4)

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

This link应该让你站稳脚跟。

答案 1 :(得分:1)

来自UIViewController类参考:

  

当可见视图控制器发生旋转时,   willRotateToInterfaceOrientation:时间:,   willAnimateRotationToInterfaceOrientation:duration:,和   didRotateFromInterfaceOrientation:在调用期间调用方法   回转。 viewWillLayoutSubviews方法也在调用之后调用   视图由其父级调整大小和位置。如果是视图控制器   当方向发生变化时不可见,然后是旋转   永远不会调用方法。但是,viewWillLayoutSubviews方法   在视图变得可见时调用。你执行这个   方法可以调用statusBarOrientation方法来确定   设备方向。

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

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