iOS状态栏设置

本文详细介绍了如何在iOS中设置状态栏的显示与隐藏、颜色以及背景色,包括启动页状态栏、普通viewController、带有NavigationController的情况。还提供了全局和局部设置状态栏隐藏的方法,并讨论了导航控制器对状态栏样式的影响,以及如何通过KVC强制设置状态栏背景色。总结建议在info.plist中启用基于控制器的状态栏显示,并在自定义导航控制器和各控制器中进行细致的设置。

iOS状态栏设置
默认启动页的status

默认的viewController状态栏

一. 状态栏显示和隐藏
1.1 启动页
启动页隐藏StatusBar(默认为NO): Status bar is initially hidden = YES


1.2 普通viewController
普通的viewController:View controller-based status bar appearance = NO

注意:设置为NO后,导航控制器会向上移动

1.3 有NavigationController
只有设置了Status bar is initially hidden = YES后, View controller-based status bar appearance的设置才有效.

1.4 手动设置隐藏
在info.plist里面:View controller-based status bar appearance = NO
全局设置: UIApplication.shared.isStatusBarHidden = true(iOS9过期了)
1.5 局部设置隐藏
在info.plist里面:View controller-based status bar appearance = YES
在需要隐藏的控制器里面
    override var prefersStatusBarHidden: Bool{
        return true
    }

二. 颜色设置
2.1 普通的viewController
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent;//你想设置的颜色
    }

2.2 有NavigationController
在有导航控制器的时候,上面设置是没有用的, 因为导航控制器也有控制statusBar的权利.
2.2.1 方法一:以topVC的为准,没有就返回默认的
//MyNavigationController.swift
override var preferredStatusBarStyle: UIStatusBarStyle{
        return topViewController?.preferredStatusBarStyle ?? .default
    }

//--------------------------------

//MyViewController.swift
  override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent;//你想设置的颜色
    }

效果如下:


2.2.2 方法二: 通过拿到导航控制器设置
navigationController?.navigationBar.barStyle = .black//你想设置的样式
//样式枚举如下
public enum UIBarStyle : Int {
    case `default`
    case black
    public static var blackOpaque: UIBarStyle { get } // Deprecated. Use UIBarStyleBlack
    case blackTranslucent // Deprecated. Use UIBarStyleBlack and set the translucent property to YES
}
 

三. 状态栏背景色设置
3.1 状态栏很大程度上依赖于导航栏的设置
无导航栏时: 默认是透明的
有导航栏时: 默认是导航栏的颜色
设置导航栏的颜色
navigationController?.navigationBar.barTintColor = UIColor.red

效果如下:


3.2 KVC强制设置状态栏的颜色:设置状态栏背景色,有点暴力,这样所有状态栏的的背景色都会改变.
func setStatusBarBackgroundColor(color: UIColor) {
    guard let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
        return
    }
    statusBar.backgroundColor = color
}
 


三. 总结一下
一般需求变化是多样的,没有一成不变的状态栏,所以在设置的时候尽量考虑会变的情况,将状态栏的设置交给当前控制器:
在info.plist添加下面两个状态:
View controller-based status bar appearance = YES
Status bar is initially hidden = YES


自定义导航控制器里面重载系统设置状态栏样式方法:
  //MyNavigationController.swift
  override var preferredStatusBarStyle: UIStatusBarStyle{
          return topViewController?.preferredStatusBarStyle ?? .default
      }

在自己的控制器里面做显示隐藏控制,颜色控制
  /// 显示或隐藏
  override var prefersStatusBarHidden: Bool{
      return true
  }
  ///显示样式
  override var preferredStatusBarStyle: UIStatusBarStyle{
      return .lightContent;
  }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值