1. 程式人生 > >iOS導航欄隱藏

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];
}