1. 程式人生 > >UITabBarController+UINavigationController多層巢狀

UITabBarController+UINavigationController多層巢狀

網上有海量的關於建立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: