深入理解iOS的状态栏

2020-01-18 16:13:32王振洲

一、状态栏的隐藏

状态栏的隐藏主要有两种方法,下面来一起看看吧。

方法一:通过代码控制


@interface UIApplication(UIApplicationDeprecated)

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden 
NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated 
NS_DEPRECATED_IOS(2_0, 3_2) __TVOS_PROHIBITED;
 // use -setStatusBarHidden:withAnimation:
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation 
NS_DEPRECATED_IOS(3_2, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

注意:让我们先来看看// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.这个注释提示,苹果提示开发者如果使用的是系统基础的状态栏样式你的这些设置是不生效的,在接下来要介绍的通过Info.plist隐藏状态栏同样要注意这件事。

Info.plist中添加一个View controller-based status bar appearance设置选项,设置为NO这样就可以使用上边的方法了

ios状态栏颜色,ios状态栏隐藏,ios状态栏

注意:添加的View controller-based status bar appearanceBool类型,默认为Yes,很不幸iOS9之后苹果已经不推荐使用这些方法了,这些方法能用但是会报警告。

那么这些方法被禁用以后,如何操作呢?注释里已经提示Use -[UIViewController prefersStatusBarHidden]这是iOS7之后苹果在UIViewController里添加的新方法,这么做的目的可以让开发者更加灵活的自定义每个ViewController的状态栏。


- (BOOL)prefersStatusBarHidden{
  return YES;
}

iOS7之后UIViewController中不只提供了这个关于状态栏的设置的函数,还有其他的,后面详细说。

方法二:通过Info.plist控制

1,首先我们依然要设置这个(第2步中的两种方式都要设置这个参数)

ios状态栏颜色,ios状态栏隐藏,ios状态栏

2,然后设置(两种方式)

ios状态栏颜色,ios状态栏隐藏,ios状态栏

或者

ios状态栏颜色,ios状态栏隐藏,ios状态栏