iOS7展示视图控制器时不会旋转,导致状态栏消失。

4
我有一个iPad应用程序,其中包含一个主视图控制器,在顶部有状态栏和导航栏。
当我旋转这个主视图 - 一切正常。 但是当我弹出全屏模态视图控制器并在它呈现时旋转设备时,会发生以下情况:
1. 呈现的视图控制器按预期旋转。 2. 当关闭时,主视图仍处于呈现时的方向(错误的方向),但状态栏位于顶部(就像只有状态栏被旋转了)。 3. 在玩弄设备一段时间后,方向变为正确的方向,但现在状态栏没有其顶部的20px边距 - 它现在重叠导航栏,看起来很糟糕。
对此有何想法?
编辑:不使用UINavigationController可以防止状态栏重叠导航栏问题,但旋转问题仍然存在。

你能提供一些关于演示方面的代码吗?你是使用标准模态转场样式之一还是自定义转场? - azsromej
模态呈现样式为UIModalTransitionStyleCrossDissolve。这里没有任何自定义内容。 - Eliktz
2个回答

4

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

此链接可以帮助您入门。


1

从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];
}

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