2009-06-24 61 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」的不起眼屬性。只需檢查它。它解決了我的問題。