2012-09-24 90 views
2

我有一個包含UITabBarController的UINavigationController的根視圖。標籤欄控制器有兩個簡單的視圖。當它首次在iOS 6模擬器或設備上啓動時,第一個視圖上方會出現間隙。切換到第二個標籤並返回,導致間隙消失。這只是從iOS 6開始發生。iOS 5的工作很好。任何想法改變了?UINavigationController中的UITabBarController的差距

截圖:

Screenshot

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
    UIView *dummyView1 = [[UIView alloc] init]; 
    [dummyView1 setBackgroundColor:[UIColor redColor]]; 
    UIViewController *dummyViewController1 = [[UIViewController alloc] init]; 
    [dummyViewController1 setView:dummyView1]; 

    UIView *dummyView2 = [[UIView alloc] init]; 
    [dummyView2 setBackgroundColor:[UIColor blueColor]]; 
    UIViewController *dummyViewController2 = [[UIViewController alloc] init]; 
    [dummyViewController2 setView:dummyView2]; 

    NSArray *viewControllers = [NSArray arrayWithObjects:dummyViewController1, dummyViewController2, nil]; 

    [tabBarController setViewControllers:viewControllers]; 

    UINavigationController *rootNavController = [[UINavigationController alloc] initWithRootViewController:tabBarController]; 
    [[self window] setRootViewController:rootNavController]; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

爲什麼不使用故事板? – Bernat

+0

剛剛遇到這個我自己看到的問題只存在於ios 7中而不是ios 8.所以蘋果一定意識到這是一個合法的bug,並且將它自己固定在ios 8中 –

回答

2

蘋果明確地告訴我們,我相信應用程序編程指南(或者也許是的ViewController指南),一個tabBarController不應放置在導航控制器。您需要改變訂單。您可以通過切換其控制器陣列來玩tabBarController的技巧,並讓其中一組隱藏tabBar。但是現在任何嘗試使用這個命令都註定會失敗 - 你可以讓它工作在iOS5.1中,然後在6,6.1或7中看到它的中斷。

1

不,蘋果需要解釋原因。我已經通過他們的文檔查看了所有內容,但找不到合理的理由來執行此操作。

我可以想到這個配置非常合理的使用。假設我想創建一個應用程序,用於顯示一組實體的類別信息,例如體育聯盟中的團隊。我可以使用導航控制器作爲包絡控制器和標籤欄來顯示每個團隊的各種統計數據,例如團隊或玩家的統計數據。爲什麼你會以任何其他方式做這樣的事情?這完全合乎邏輯。除了安撫蘋果當然神。

0

不知道爲什麼他們不允許它爲什麼「間隙」發生,但我發現它周圍的方式:

tabController.SelectedIndex=1; 
tabController.SelectedIndex=0; 

推標籤到導航控制器之後。

0

我發現這一點的最好辦法是沒有根控制器創建的UINavigationController,將它添加到窗口,然後推的UITabBarController:

navigationController = [[UINavigationController alloc] init]; 

[[self window] setRootViewController:navigationController]; 

[navigationController pushViewController:tabBarController animated:NO]; 
相關問題