4

在我开始为 iOS 6 调整我的应用程序之前根本没有这个问题。每当我从模态转场返回时(使用dismissViewControllerAnimated:completion:),我的主视图都会向上移动大约状态栏的高度偏移量(并且随后位于状态栏后面)。

我发现的唯一解决方法是添加:

self.navigationController.view.frame = CGRectMake(0, 20, 320, 460);
self.view.frame = CGRectMake(0, 0, 320, 416);

到我的dismissViewControllerAnimated:completion 方法(这些值适用于iPhone < 5,仅用于解释)。但这并不能真正解决问题,因为当我要呈现下一个模态视图控制器时,呈现的视图会向上移动大约状态栏的高度偏移量。

不知道这个问题是如何产生的。我的怀疑是,在 segue 的某个地方,导航控制器之一丢失了状态栏的存在(以某种方式链接到新的状态栏?)。

编辑:主视图的屏幕截图,模态解除后。[注意:底部有 20px 空白]在此处输入图像描述

4

3 回答 3

13

解决了这个问题。我的习惯navigationControllersupportedInterfaceOrientations回归UIInterfaceOrientationPortrait,而不是UIInterfaceOrientationMaskPortrait

于 2012-09-24T15:01:39.140 回答
1

您的回答对我也不起作用,但我找到了 Mike Foster 的解决方案:http: //fostah.com/ios/2012/09/27/ios6-orientation-handling.html

他的步骤是:

  1. 添加应用程序supportedInterfaceOrientation并让它返回UIInterfaceOrientationMaskAll(或者在我的情况下我使用AllButUpsideDown)
  2. 在你的 rootViewController 中实现 shouldAutorotate 并让它返回 NO
  3. 不要在你的 rootViewController 中实现 supportedInterfaceOrientations (这似乎是导致我的状态栏出现问题的步骤)
  4. 在应该是景观的 viewController 中,实现 shouldAutorotate 以返回 NO 和 supportedInterfaceOrientations 以返回 UIInterfaceOrientationMaskLandscape

希望这可以帮助其他一些人。

于 2013-04-16T21:44:51.780 回答
0

这个答案对我不起作用,即使我具有与 rootViewController 相同的自定义 navigationController 结构。在我的应用程序中,除了我的模态框(UIInterfaceOrientationMaskAll)之外,我希望所有 VC 都采用纵向模式。

起作用的是您的解决方法的变体,除了它将考虑 iPhone 4 和 iPhone 5 的屏幕尺寸和导航栏的高度:

[yourParentVC dismissViewControllerAnimated:NO completion:^{

    [yourParentVC.view setFrame:CGRectMake(0, 0, [UIScreen mainScreen].applicationFrame.size.width, [UIScreen mainScreen].applicationFrame.size.height-44)];
    //your other completion code
}];

+1 提出这个问题......不高兴它为 iOS 6 中的所有弃用做了多少工作,所以每一点都有帮助。

于 2013-03-19T19:54:44.210 回答