感觉有时候修改状态栏的需求挺多的,今天总结一下:
iOS 状态栏就是手机最上面显示电池时间等部分,如下图,状态栏背景部分比较容易设置,我们可以通过设置导航栏的背景色或背景图片或者控制视图的背景色来设置 即 navigationBar的tintColor ,但是如果设置了setBackgroundImage(<#T##backgroundImage: UIImage?##UIImage?#>, for: <#T##UIBarMetrics#>) 那么前面的设置将无效。
主要总结下设置前景色的修改,即上图文字或者符号的颜色
xcode 有几个部分可以设置如下图
图中Status Bar Style 默认是default ,显示为黑色。如果不带导航栏,如图中修改为light后,info.plist 中会自动增加
此时状态栏的颜色为白色。
下面的Hide status bar 默认未勾选,即所有的页面导航栏都不隐藏,当我们勾选后可以设置启动页隐藏状态栏,同时plist文件中也会增加相应设置项
还有就是修改info.plist 中的
这个View controller-based status bar apparence 项主要对status bar 两种设置的优先级 即全局的apparence 和viewController 中的preferredStatusBarStyle: UIStatusBarStyle 属性的设置的优先级,YES 则View controller中的设置优先级较高,全局的设置则无效。同理,设置为NO,那么在ViewController 中对状态栏的设置将无效。
知道这些就可以根据需求,决定是否设置全局的状态栏的颜色还是单个controller中的状态栏的变化。
但是对于带导航栏的控制器上面讲的设置status style可能无效。因为当前控制器被导航栏包裹,这时候应该在导航栏中设置状态栏才是对的。
我们可以单独创建一个导航栏的子类,通过ViewController的以下方法
@available(iOS 7.0, *)
open var childViewControllerForStatusBarStyle: UIViewController? { get }
设置导航栏的最外层控制器的状态栏起作用
override var childViewControllerForStatusBarStyle: UIViewController? {
return topViewController
}
还有一些需求是需要随时改变状态栏的颜色,
@available(iOS 7.0, *)
open func setNeedsStatusBarAppearanceUpdate()
通过调用该方法更新状态栏的颜色
@available(iOS 7.0, *)
open var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get }
设置状态栏改变的动画效果
写了个demo:状态栏随tableView 滚动变化,顶部图片随滚动放大 下载地址:http://download.csdn.net/download/mengguihua110/10257526 有时间再放到github 上去
来源:CSDN
作者:Dev_Meng
链接:https://blog.csdn.net/mengguihua110/article/details/79351588