隐藏状态栏
这里面分两种情况:1.全局隐藏状态栏;2.部分页面隐藏状态栏。
全局隐藏状态栏
如果想全局隐藏状态栏,分两步:
-
在info.plist中设置UIViewControllerBasedStatusBarAppearance为false(true:代表状态栏状态由每个控制器自己决定;false:代表状态栏状态由全局设定,控制器设置状态栏的方法不起作用);
image1.png
-
在target -> General -> Deployment Info中勾选Hide status bar。
image2.png
部分页面隐藏状态栏
如果只想隐藏部分页面的状态栏,也分两步:
- 在info.plist中设置UIViewControllerBasedStatusBarAppearance为true;
- 在需要隐藏状态栏的控制器里,实现prefersStatusBarHidden方法。
- (BOOL)prefersStatusBarHidden {
return YES;
}
隐藏状态栏和导航栏搭配使用
很多时候,我们的需求是状态栏和导航栏要么一起隐藏,要么一起显示,当然我们可以分别设置状态栏和导航栏显示隐藏的状态。我这里记录一种我自己曾经完成这种需求的写法。
-
在导航栏控制器的根控制器遵守UINavigationControllerDelegate代理,并实现willShowViewController:代理方法。
-
在代理方法里,根据目标控制器的状态栏是否隐藏,决定导航控制器的导航栏是否隐藏。
#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];
}
}
网友评论