功能-状态栏statusBar的相关设置


设置statusBar的前景部分

状态栏类型:

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
    
    UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
    UIStatusBarStyleBlackOpaque      NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;

状态栏修改方式:

  • plist设置

    在plist添加一行UIStatusBarStyle(或Status bar style),值可以是

    • UIStatusBarStyleDefault
    • UIStatusBarStyleLightContent

    设置后app启动的launch页显示的时候,statusBar的样式就是上面plist设置的风格.

  • 代码设置

    • iOS 2.0 ~ 9.0

        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 
      
      [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
      
  • iOS 7.0 ~

    Tag:

    UIViewcontroller或者UINavigationController都是控制器,下面统一叫它们控制器。

    状态栏statusBar是属于UIApplication的一个UI,也就是说一个app只有一个状态栏,并不是每一个控制器都拥有的属性,所以在控制器中通过preferredStatusBarStyle方法修改的状态栏样式不一定有用,只有当该控制器是当前app的控制者的时候,状态栏的样式才会听命于这个控制器。

    一般我们都是写一个UINavigationController作为window的rootViewController,其它的控制器都是在UINavigationController的管理下,app的控制权一直在UINavigationController手中,所以状态栏的样式只听命于这个UINavigationController。

    由此我们得出一种控制状态栏风格的方法,自定义一个UINavigationController,在自定义UINavigationController中实现preferredStatusBarStyle方法指定状态栏样式,只要更改这个自定义类中preferredStatusBarStyle方法里的值,就能更改状态栏的风格。

    如果要让这个UINavigationController管理的所有控制器也能通过preferredStatusBarStyle方法更改状态栏风格,可以通过childViewControllerForStatusBarStyle方法出借更改权限给指定的控制器,代码如下:

    - (UIViewController *)childViewControllerForStatusBarStyle{
            return self.topViewController;
     }
    

    这样在UINavigationController管理栈中的栈顶控制器就有权限控制器状态栏了。

    除此之外,我们也可以用模态跳转的方式来控制器与控制器之间的跳转,这种情况下每个控制器都有权限控制状态栏风格。

    [self presentViewController:vc animated:YES completion:^{}];
    


    指定当前控制器的状态栏风格

     - (UIStatusBarStyle)preferredStatusBarStyle;
    


    指定当前控制器的子控制器读取谁的状态栏样式,当返回nil时,默认读取自身设置的状态栏样式

      - (UIViewController *)childViewControllerForStatusBarStyle;  
    

    调用该方法,调用当前拥有控制权的控制器的 -preferredStatusBarStyle方法刷新状态栏风格

      - (void)setNeedsStatusBarAppearanceUpdate;
    

设置statusBar的【背景部分】

  • iOS 7.0之前 通过tintColor修改
  • iOS 7.0之后 通过barTintColor修改

如果调用了以下方法,barTintColor将无效

- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics 
NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
      ```

你可能感兴趣的:(功能-状态栏statusBar的相关设置)