UINavigationController与UITabBarController相关问题

UINavigationController与UITabBarController相关问题_iOS


UINavigationController与UITabBarController混用是非常常见的,有时候会遇到UINavigationController推出(push)出controller后隐藏UITabBarController的问题,很容易对吧.

UINavigationController与UITabBarController相关问题_重要_02

UINavigationController与UITabBarController相关问题_控制器_03

源码如下:


// //  AppDelegate.m //  NavigationController // //  Copyright (c) 2014年 Y.X. All rights reserved. //  #import "AppDelegate.h" #import "RootViewController.h"  #define CreateNavigationControllerWith(controller) \ [[UINavigationController alloc] initWithRootViewController:controller]  @implementation AppDelegate  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];      // 初始化导航栏控制器     UINavigationController *newProductNC  = \         CreateNavigationControllerWith([RootViewController new]);          // 初始化TabBarController     UITabBarController *rootBC = [[UITabBarController alloc] init];     rootBC.viewControllers = @[newProductNC];          // 交给系统管理     self.window.rootViewController = rootBC;          self.window.backgroundColor = [UIColor whiteColor];     [self.window makeKeyAndVisible];     return YES; }  @end


// //  RootViewController.m //  NavigationController // //  Copyright (c) 2014年 Y.X. All rights reserved. //  #import "RootViewController.h" #import "SecondViewController.h"  @interface RootViewController ()  @end  @implementation RootViewController  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];     if (self)     {         self.title = @"YouXianMing";     }     return self; }  - (void)viewDidLoad {     [super viewDidLoad];          // 设定背景色     self.view.backgroundColor = [UIColor whiteColor];      // 点击手势     UITapGestureRecognizer *tapGesture = \         [[UITapGestureRecognizer alloc] initWithTarget:self                                                 action:@selector(tapEvent:)];          // 添加手势     [self.view addGestureRecognizer:tapGesture]; }  - (void)tapEvent:(UIGestureRecognizer *)sender {     [self.navigationController pushViewController:[SecondViewController new]                                          animated:YES]; }  @end


// //  SecondViewController.m //  NavigationController // //  Copyright (c) 2014年 Y.X. All rights reserved. //  #import "SecondViewController.h"  @interface SecondViewController ()  @end  @implementation SecondViewController  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];     if (self)     {      }     return self; }  - (void)viewDidLoad {     [super viewDidLoad];     self.view.backgroundColor = [UIColor whiteColor]; }  @end


效果:

UINavigationController与UITabBarController相关问题_iOS_04

将RootViewController.m中tapEvent:修改一下,如下所示:

UINavigationController与UITabBarController相关问题_重要_05

效果(注意看底部的隐藏效果哦):

UINavigationController与UITabBarController相关问题_bundle_06

注意:隐藏与取消隐藏是成对出现的.



附录:

-修改系统颜色样式-

UINavigationController与UITabBarController相关问题_iOS_07

UINavigationController与UITabBarController相关问题_bundle_08UINavigationController与UITabBarController相关问题_控制器_09

 ​