2009-06-24 75 views
13

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

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

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

UIView *finalView = myeNavigationViewController.view; 

[self.view addSubview:finalView]; 

似乎一切按计划进行,除了我得到我的状态栏和UINavigationController的标题栏之间视图顶部一个奇怪的白色空间里工作。 alt text http://www.andrewskinner.name/problem.png

我在网上搜索,但不知道要搜索什么。有没有其他人有这个问题?你能帮我指点一下吗?

在此先感谢。

回答

0

也许你得到了两个UIViews, 每个都有一个状态栏。检查xib。

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

帧设定的界限也删除了您询问的顶部的空白区域。

2

的问题是,UINavigationController的理想应该是一个UIWindow的直接子视图。它的位置和大小都是正确的。当您将UINavigationController添加到UIWindow子视图的另一个自定义视图中时,需要考虑是否在UIWindow中显示状态栏或者不显示状态栏,以便自定义视图的位置和大小。

我的建议是让自定义视图的UINavigationController的一个子类:

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

[myUIWindow addSubview:nav.view]; 

和mySubClass_NavigationController里面,你可以做一切你在你自己现在做的(无论是控制器)定制。

2

我这个挣扎了一会儿也使用非常相似的代码来运算的,并也有我上面的导航控制器白条。

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

这是我的loadView结束了在我的UITabBarController视图控制器的一个代码。

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

1

IB中有一个名为“Hides Bottom Bar on Push”的不起眼属性。只需检查它。它解决了我的问题。