iOS导航栏隐藏

简介

我们在项目中经常遇到.从二级控制器跳转到不需要导航栏的控制器中,经常用的就是下面第一种做法:





  • 第一种做法 
    -(void)viewWillAppear:(BOOL)animated
    {
        self.navigationController.navigationBarHidden = YES;
        [super viewWillAppear:animated];
    
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        self.navigationController.navigationBarHidden = NO;
        [super viewWillDisappear:animated];
    }

    但是,有时候第一种方法不起作用;我们就需要设置self为导航控制器的代理,实现代理方法,在将要显示控制器中设置导航栏隐藏和显示,使用这种方式不仅完美切合滑动返回手势,同时也解决了切换tabBar的时候,导航栏动态隐藏的问题.
  • 第二种做法

@interface viewController ()<UINavigationControllerDelegate>
@end

@implementation viewController


- (void)viewDidLoad {
//    self.navigationController.navigationBarHidden = YES;

    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self setUpUI];
    // 设置导航控制器的代理为self
    self.navigationController.delegate = self;

}
#pragma mark - UINavigationControllerDelegate
// 将要显示控制器
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // 判断要显示的控制器是否是自己
    BOOL isShowHomePage = [viewController isKindOfClass:[self class]];
    
    [self.navigationController setNavigationBarHidden:isShowHomePage animated:YES];
}



猜你喜欢

转载自blog.csdn.net/baidu_25743639/article/details/78214170