13

我在将 UINavigationController 添加到我的 iPhone 应用程序时遇到了一个奇怪的问题。我添加控制器如下:

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];

myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];

UIView *finalView = myeNavigationViewController.view;

[self.view addSubview:finalView];

一切似乎都按计划进行,除了在状态栏和 UINavigationController 标题栏之间的视图顶部出现一个奇怪的空白。 替代文字 http://www.andrewskinner.name/problem.png

我在网上搜索过,但真的不知道要搜索什么。有没有其他人有这个问题?你能给我指明一些帮助的方向吗?

提前致谢。

4

6 回答 6

11

线是做什么的

UIView *finalView = myeNavigationViewController.view;

添加到代码?这是多余的,因为您可以直接添加视图而无需先将其分配给 UIView - 而且它不正确,因为它引用了 myNavigationController 而不是 navigationController..
我倾向于这样做

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];    
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];

将框架设置为边界也会删除您所询问的顶部的空白区域。

于 2009-06-30T12:34:44.250 回答
9

看看这个问题的答案:

不知道为什么 UIView 被推高了大约 10px

于 2009-06-30T12:36:30.423 回答
2

问题是 UINavigationController 理想情况下应该是 UIWindow 的直接子视图。它会自行定位和调整大小。当您将 UINavigationController 添加到 UIWindow 子视图的另一个自定义视图中时,您需要通过考虑状态栏是否显示在 UIWindow 中来处理此自定义视图的位置和大小。

我的建议是将自定义视图作为 UINavigationController 的子类:

mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];

[myUIWindow addSubview:nav.view];

在 mySubClass_NavigationController 中,您可以在自己中进行所有自定义(无论该控制器是什么)。

于 2010-04-30T17:59:35.207 回答
2

我也为此苦苦挣扎了一段时间,使用与操作非常相似的代码,并且在我的导航控制器上方还有一个白条。

将 UINavigationController 添加为 UITabController 中的视图时出现了我的问题。在我的例子中,空间是由 UINavigationController 的 UINavigationBar 部分引起的,考虑到状态栏,它实际上是我试图在 UINavigationController 中显示的视图的重叠部分。

这是我在我的一个 UITabBarController 视图控制器中的 loadView 中最终得到的代码。

SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];

UINavigationController *navController = [[UINavigationController alloc]
                                         initWithRootViewController:screenList];

CGRect frame = [[navController navigationBar] frame];

frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.

[[navController navigationBar] setFrame:frame];

[self setView:[navController view]];

在http://discussions.apple.com/message.jspa?messageID=7890362有更多信息。

于 2010-11-30T01:02:01.297 回答
1

IB 中有一个不为人知的属性,称为“Hides Bottom Bar on Push”。只是检查一下。它为我解决了这个问题。

于 2012-05-08T22:59:36.570 回答
0

也许你以某种方式得到了两个 UIView,每个都有一个状态栏。检查xib。

于 2009-06-24T22:21:06.363 回答