UITabBarController+UINavigationController多層巢狀
阿新 • • 發佈:2019-01-05
網上有海量的關於建立UITabBarController例項的程式碼,不過99%都是在AppDelegate中建立並作為App的根檢視。但是,並不見得UITabBarController就一定要作為App的根檢視存在。下面提供的這個demo就是在某個檢視控制器中創建出來的(且標籤的viewControllers全都是導航欄控制器),並且該檢視控制器將做為一個UINavigationController的rootViewController,然後將這個UINavigationController的view加到其他別的檢視控制器的view中。從而實現了RT所述的UINavigationController+UITabBarController多層巢狀。
不過,在UI上有個小Bug,就是顯示出來的標籤欄控制器的view會下移一段狀態列的高度。樓主為這個真是百思不得其解阿。 但是,最後設定了UITabBarController的view的frame為(0,-20,320,480)才將問題解決(設定為(0,0,320,460)不能解決問題)。
下面是部分程式碼
用UINavigationController巢狀帶有UITabBarController的檢視控制器:
- (void)viewDidLoad
{
[super viewDidLoad];
if (mainNav == nil) {
MainViewController *mainViewController = [[MainViewController alloc] initWithNibName:nil bundle:nil];
mainNav = [[UINavigationController alloc] initWithRootViewController:mainViewController];
[mainViewController release];
}
mainNav.view.frame = CGRectMake(0.0, 0.0, 320.0, 460.0);
mainNav.view.backgroundColor = [UIColor blackColor];
[self.view addSubview:mainNav.view];
}
例項化UITabBarController:
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBarHidden = YES;
if (tabBarCon == nil) {
tabBarCon = [[UITabBarController alloc] init];
FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *firstNav = [[UINavigationController alloc] initWithRootViewController:firstViewController];
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *secondNav = [[UINavigationController alloc] initWithRootViewController:secondViewController];
tabBarCon.viewControllers = [NSArray arrayWithObjects:firstNav,secondNav, nil];
}
/*******************************************************************************************************/
tabBarCon.view.frame = CGRectMake(0.0, -20.0, 320.0, 480.0);// 這句很關鍵,不加這句將會有一段狀態列高度的空白區域
/*******************************************************************************************************/
[self.view addSubview:tabBarCon.view];
}
附demo: