状态栏的隐藏主要有两种方法: 方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusBarHi

时间:2021-06-15 16:50:21
  
  
 
 

状态栏的隐藏主要有两种方法:

方法一:通过代码控制


@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这样就可以使用上边的方法了

状态栏的隐藏主要有两种方法: 方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusBarHi
注意:添加的View controller-based status bar appearance是Bool类型,默认为Yes

很不幸iOS9之后苹果已经不推荐使用这些方法了,这些方法能用但是会报警告。

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

- (BOOL)prefersStatusBarHidden{    return YES;}

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

方法二:通过Info.plist控制
1,首先我们依然要设置这个(第2步中的两种方式都要设置这个参数)

状态栏的隐藏主要有两种方法: 方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusBarHi

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


状态栏的隐藏主要有两种方法: 方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusBarHi

或者


状态栏的隐藏主要有两种方法: 方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusBarHi

两者是等效的!并且两者的状态是同步的。

状态栏样式

先看看都有哪些样式(解释看注释)

typedef NS_ENUM(NSInteger, UIStatusBarStyle) {//默认样式,黑字透明状态栏,适合用于背景色为亮色的页面    UIStatusBarStyleDefault                                     = 0, // Dark content, for use on light backgrounds//白字透明状态栏,适合用于背景色为暗色的页面    UIStatusBarStyleLightContent     NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds    // iOS7.0以前黑底白字,iOS7以后跟UIStatusBarStyleLightContent效果一样    UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,// iOS7.0以前启动页为灰底白字,iOS7以后跟UIStatusBarStyleLightContent效果一样    UIStatusBarStyleBlackOpaque      NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,} __TVOS_PROHIBITED;

如何设置状态栏样式

// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system.@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;

同样iOS9以后这些方法被禁用了,苹果推荐在具体的viewControllerUse -[UIViewController preferredStatusBarStyle]

- (UIStatusBarStyle)preferredStatusBarStyle{    return UIStatusBarStyleLightContent;}

注意:我们通常使用的viewController都是嵌套在UINavigationController中使用的,此时在viewController中使用
- (UIStatusBarStyle)preferredStatusBarStyle;函数会发现设置并没有生效。
这里链一篇关于这个问题的博客:UINavigationController和View Controller-based状态栏风格

除了以上博客中的方法外,系统也给我们提供了一个函数- (UIViewController *)childViewControllerForStatusBarStyle,也可以解决这个问题,后面会讲。



作者:MajorLMJ
链接:http://www.jianshu.com/p/4196d7cf95f4
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。