2010-05-17 22 views
2

我的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上運行,這在模擬器和設備上都會發生。除了這個特定的序列,一切似乎都很好。幫幫我!

回答

2

當您在另一個UIViewController(在本例中爲UITabBarController)中嵌套一個UINavigationController時,會出現此問題。如果您將UINavigationController作爲根視圖控制器,則不會發生此問題。

一種解決方案可能是進入並更改導航欄的框架(將y原點從0設置爲20),但文檔明確指出不要這樣做。所以對我來說,這是一個跡象表明,它不被認爲是嵌套UINavigationController的好UI - 你不應該這樣做。

請讓我知道您的想法 - 謝謝。 :)

+0

要麼,或問題是的UITabBarController不根控制器本身。我在使用「自定義」根視圖控制器時遇到了很多旋轉問題。我已經停止了這樣做,並已決定使用UITabBarController或UINavigationController作爲我的應用程序的主根控制器,並實現「特殊」啓動屏幕作爲模式VC「立即」彈出(沒有動畫),然後是與動畫解散。 – Bogatyr 2010-12-30 09:21:29

0

一種解決方法工作在一些場合:

轉動後,迫使導航欄的刷新,因此其觀點的框架是否正確調整。一些這樣的代碼:

  • (無效)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

{

// if _navigationController is showing 
[_navigationController setNavigationBarHidden:YES]; 

[_navigationController setNavigationBarHidden:NO]; 

}

相關問題