隐藏状态栏

隐藏状态栏

这里面分两种情况:1.全局隐藏状态栏;2.部分页面隐藏状态栏。

全局隐藏状态栏

如果想全局隐藏状态栏,分两步:

  1. 在info.plist中设置UIViewControllerBasedStatusBarAppearancefalse(true:代表状态栏状态由每个控制器自己决定;false:代表状态栏状态由全局设定,控制器设置状态栏的方法不起作用);

    image1.png

  2. target -> General -> Deployment Info中勾选Hide status bar

    image2.png

部分页面隐藏状态栏

如果只想隐藏部分页面的状态栏,也分两步:

  1. 在info.plist中设置UIViewControllerBasedStatusBarAppearancetrue
  2. 在需要隐藏状态栏的控制器里,实现prefersStatusBarHidden方法。
- (BOOL)prefersStatusBarHidden {
    return YES;
}

隐藏状态栏和导航栏搭配使用

很多时候,我们的需求是状态栏和导航栏要么一起隐藏,要么一起显示,当然我们可以分别设置状态栏和导航栏显示隐藏的状态。我这里记录一种我自己曾经完成这种需求的写法。

  1. 在导航栏控制器的根控制器遵守UINavigationControllerDelegate代理,并实现willShowViewController:代理方法。

  2. 在代理方法里,根据目标控制器的状态栏是否隐藏,决定导航控制器的导航栏是否隐藏。

#pragma mark - life cycle
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor brownColor];
    self.title = @"首页";
    self.navigationController.delegate = self;
}

#pragma mark - UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if ([viewController prefersStatusBarHidden]) {
        [navigationController setNavigationBarHidden:YES animated:YES];
    } else {
        [navigationController setNavigationBarHidden:NO animated:YES];
    }
}

你可能感兴趣的:(隐藏状态栏)