我有一个带有主视图控制器的iPad应用程序,顶部有一个状态栏和导航栏。
当我旋转这个主视图时 - 一切都很好。 但是当我呈现一个模态(全屏)视图控制器并在设备呈现时旋转设备时,会发生这种情况:
呈现的视图控制器按预期旋转。
当被解雇时,主视图仍然处于呈现时的方向(错误的一个),但状态栏位于顶部(就像只有状态栏被旋转一样)。
稍微使用设备后,方向会改变到应有的状态,但现在状态栏顶部没有20px的边距 - 它现在与导航栏重叠,看起来很糟糕。
有关导致这种奇怪情况的任何想法?
编辑:不使用UINavigationController会阻止statusBar重叠导航栏问题,但旋转问题仍然存在。
答案 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];
}