我的iphone應用程序在旋轉時顯示出奇怪的行爲:標籤欄視圖內的導航標題和內容視圖之間出現間隙(有關如何重現的詳細信息如下)。我創建了一個小小的測試用例,它展示了相同的問題:一個自定義的根UIViewController,它以編程方式創建並顯示一個UITabBarController,它具有兩個選項卡:1)簡單的UIViewController; 2)UINavigationController,通過一個簡單的UIViewController內容視圖。旋轉和製表符切換後在導航欄和視圖之間出現間隙
該應用程序的完整代碼位於根控制器的viewDidLoad中(每個「* VC」類都是XIB用於XCode用戶界面的完全香草的UIViewController子類,僅更改了視圖背景顏色以清楚地標識每個視圖,沒有其他的)。
這裏的viewDidLoad中的代碼,以及shouldAutorotateToInterfaceOrientation代碼,這個代碼基本上是整個應用程序:
- (void)viewDidLoad {
[super viewDidLoad];
FirstVC *fvc = [[FirstVC alloc] initWithNibName:@"FirstVC" bundle:nil];
NavContentsVC *ncvc = [[NavContentsVC alloc] initWithNibName:@"NavContentsVC" bundle:nil];
UINavigationController *svc = [[UINavigationController alloc] initWithRootViewController:ncvc];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:2];
[localControllersArray addObject:fvc];
[localControllersArray addObject:svc];
fvc.title = @"FirstVC-Title";
ncvc.title = @"NavContents-Title";
UITabBarController *tbc = [[UITabBarController alloc] init];
tbc.view.frame = CGRectMake(0, 0, 320, 460);
[tbc setViewControllers:localControllersArray];
[self.view addSubview:tbc.view];
[localControllersArray release];
[ncvc release];
[svc release];
[fvc release];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
下面是如何重現該問題:
1)啓動應用程序
2) (UITabBar正確旋轉)
3)點擊標籤頁2
4)將設備旋轉到肖像 - 通知導航標題欄和導航內容視圖下方的根視圖控制器的背景顏色高10個像素左右。
5)單擊標籤1
6)單擊選項卡2
而且差距了!從我的真實應用程序中,我發現在導航控制器選項卡處於活動狀態時,所有VC推送和彈出窗口都會保持空白。切換到不同的選項卡並返回導航選項卡可清除間隙。
我在做什麼錯?我在SDK 3.1.3上運行,這在模擬器和設備上都會發生。除了這個特定的序列,一切似乎都很好。幫幫我!
要麼,或問題是的UITabBarController不根控制器本身。我在使用「自定義」根視圖控制器時遇到了很多旋轉問題。我已經停止了這樣做,並已決定使用UITabBarController或UINavigationController作爲我的應用程序的主根控制器,並實現「特殊」啓動屏幕作爲模式VC「立即」彈出(沒有動畫),然後是與動畫解散。 – Bogatyr 2010-12-30 09:21:29