新创建的工程,默认的status bar style是default,即显示的状态栏是黑色的,且默认的hide status bar为false,即状态栏是不隐藏的。
在开发过程中,往往我们需要根据产品设计的需求,在不同的场景下改变状态栏的显示颜色(黑色.default或白色.contentLight)。
状态栏隐藏与否Status bar is initially hidden和显示样式Status bar style都可以在info.plist里面配置,配置后应用内所有界面的状态栏样式会被统一设置。配置View controller-based status bar appearance为NO则表示状态栏样式受工程配置的控制,其他在控制器里面的设置都是不起作用的,若为YES,则可以在控制器级别里面对状态栏样式做调整。
那么,如何在不同的控制器界面设置相应的状态栏样式呢?首先要在info.plist设置View controller-based status bar appearance为YES,然后有以下两种情况:
情况1: 当视图控制器没有导航控制器或有导航控制器且导航栏为隐藏状态时,通过重写preferredStatusBarStyle为.contentLight或.default,可单独改变该试图控制器的状态栏的样式。
情况2: 当视图控制器有导航控制器且导航栏不隐藏时,通过重写preferredStatusBarStyle的方式会不起作用,此种情况下,状态栏的样式是根据导航栏的样式自动变化的,可通过在该视图控制器里面,设置导航栏的样式navigationController?.navigationBar.barStyle为.default或.black,导航栏会显示为相应的白背景黑title或黑背景白title(前提是导航栏的背景和title的没有被自定义,自定义后会显示自定义的结果),状态栏会显示为黑色文本或白色文本。
参考链接1