在模态NavigationController中自动化失败

时间:2011-05-27 08:01:00

标签: iphone uinavigationcontroller uitabbarcontroller rotation

我已经搜索过Stackoverflow并用Google搜索,直到我脸红了,仍然无法解决这个问题......

我有一个不太复杂的应用程序:一个标签栏控制器,其中一个根视图控制器是一个UINavigationController标签。我写的一些常规VC会以通常的方式被推到这个导航控制器上。其中一个VC有一个UIButton,呈现模态对话,这就是我遇到问题的地方。

这是一张有助于说明的图片:

UITabBarController
  \---- Tab1 root VC: UINavigationController
       \---- Nav root VC: UIViewController
            \---- ...onto which we push: UIViewController
                 \---- ... on which we present modally: UINavigationController
                      \---- Nav root VC: UIViewController

模态对话框是一个UINavigationController,对于rootViewController,我有一个简单的VC,它在其中呈现一个单独的UIView。我的VC支持横向旋转(应用程序的其余部分没有,因此将其呈现为模态的策略)。

问题:轮换,并且在后续轮换时,自动调整行为对于UIView做了一些奇怪的事情: UIView的顶部正对着状态栏,即< em>在导航栏下面。左,右,下边缘位于正确的位置。

我已经检查并仔细检查了 - 我的所有autoresizeMasks看起来都正确,autoresizesSubviews标志看起来正确,没有设置任何奇怪的插图,我的UINavigationController没有做任何像设置导航栏一样的时髦风格到半透明。

我在新的测试应用程序中重新创建了这种情况,但省略了层次结构顶部的UITabBarController,一切都按预期运行。

2 个答案:

答案 0 :(得分:0)

关于UITabBarController的一个重要观点是它只有在所有视图都可以支持的情况下才能支持自动旋转。这S.O. answer可能有助于找到出路。

另一方面,UINavigationController状态栏的高度在两种模式之间发生变化,因此您必须对其进行调整:

 CGRect frame = self.navViewController.navigationBar.frame;
 if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    frame.size.height = 44;
 } else {
    frame.size.height = 32;
 }
 self.navViewController.navigationBar.frame = frame;

编辑: 如果这不起作用,您可以尝试以编程方式强制更改设备方向,如下所示:

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeRight];

这可能会使您的主窗口调整导航栏的大小。

答案 1 :(得分:0)

固定!

以下是问题所在:

我正在使用MBProgressHUD在我的模态中的视图上显示进度微调器。 所以在viewDidLoad我有:

[self.navigationController.view addSubview:progressHUD];

在该视图中添加此HUD组件会导致旋转时调整大小;如果我改为做以下事情再次工作:

[self.view addSubview:progressHUD];