2012-05-03 84 views
2

我正在寫一個通用的應用程序。因此,我設置了它,以便我的XIB/NIB不是使用視圖控制器創建的,而是單獨創建的,然後通過將XIB上的類名稱設置爲相應視圖控制器的類名稱(和將文件所有者上的視圖鏈接到XIB上的視圖)。然後我加載適當的XIB/NIB(iPhone或ipad)當視圖控制器被初始化,像這樣:奇怪的UIView座標問題

SomeViewController *vc = [[SomeViewController alloc] initWithNibName:@"SomeView-iPhone" bundle:nil]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

另外,iphone版本是設置在底部一個的UITabBarController並且在頂部一個UINavigationController。這是創建這樣的:

MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate; 
UINavigationController *localNavigationController; 
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
NSMutableArray *localControllersArray = [[NSMutableArray alloc] init]; 

//setup the first tab 
FirstViewController *vc = [[FirstViewController alloc] initWithNibName:@"FirstView-iPhone" bundle:nil]; 
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
[localControllersArray addObject:localNavigationController]; 
[localNavigationController release]; 
[vc release]; 

//setup the second tab 
SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondView-iPhone" bundle:nil]; 
localNavigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
[localControllersArray addObject:localNavigationController]; 
[localNavigationController release]; 
[vc release]; 

.... 

//set the controllers onto the tab bar 
tabBarController.viewControllers = localControllersArray; 
[localControllersArray release];  

[appDelegate.window setRootViewController:tabBarController]; 
[tabBarController release]; 

所有這些工作完全正常。 iPhone視圖顯示正常(帶有工作標籤欄和導航欄)和導航工作正常。這裏是奇怪的事情(兩條怪異的怪物)。

,其放置爲IB - 大多數用戶界面元素(標籤,按鈕等)顯示優良
- 如果我在代碼中創建一個UIScrollView並將其添加到視圖,它顯示了優良
- 如果我創建IB中的UIScrollView並將其放在視圖上,它會在設計時從IB出現的位置運行時轉移93像素
- 如果我在IB中創建UIScrollView作爲單獨視圖,然後將其添加到在代碼中的主視圖它被調換了93個像素。

換句話說,如果我這樣做:

[scrollView setFrame:CGRectMake(0,0,320,100)]; 
[self.view addSubview:scrollView]; 

然後,它會在0,0這是在代碼中創建一個UIScrollView顯示出來,但它會在顯示(0,-93 )爲在IB中創建的UIScrollView(並通過IBOutlet鏈接到ivar)。現在恰好93 + 44 + 49,這是標籤欄和導航欄的高度組合。這顯然不是巧合。

所以問題是,爲什麼iOS在運行時將導航欄和標籤欄的高度在IB中創建的滾動視圖向上移動(而不是其他UI元素,如UILabel或UIButton)?

編輯:我已經使用的代碼,在iPhone應用程序之前設置標籤欄和導航欄,它沒有這個問題,所以我懷疑這與使用initWithNibName初始化我的視圖控制器或XIB文件手動鏈接到VC,因爲這是我的通用應用程序不同。

+0

可能重複的[UIView大小/位置不工作在iPhone上的iPhone上](http://stackoverflow.com/questions/7981962/uiview-size-position-not-working-on-ipad-as-on- iphone) – Caleb

+0

這些問題甚至不相似。同樣的問題,兩個完全不同的背景。 – Joel

回答

2

我解決了它。我偶然發現了這個問題/答案,沒有的伎倆:

UIView size/position not working on iPad as on iPhone

這是默認的IB創建的滾動視圖設置爲自動調整大小以左下角因爲發生。我將它切換到綁定到左上角,現在一切都很好。奇怪。

+0

如果您解決了問題,請將您的答案標記爲解決方案 –

+0

我無法接受我自己的答案2天... – Joel

+0

是的,您是對的。我忘了那個。 –