加载视图控制器时如何更改状态栏样式?

时间:2018-09-19 08:15:17

标签: ios iphone swift uikit

通过在Info.plist中将Status bar is initially hidden设置为YES,我可以在启动屏幕上隐藏状态栏,然后我想使用{{1}在我的第一个视图控制器上显示它。 }样式。

但是.lightContent自iOS 9起就被弃用(因此我不想使用它),并使用以下代码在我的第一个视图控制器上给我一个黑色状态栏。

UIApplication.shared.statusBarStyle = .lightContent

在加载第一个视图控制器时如何更改状态栏样式?

我试图找到像override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 这样的全局解决方案,因为我真的不想为每个视图控制器都设置状态栏样式。 我已经将UIApplication.shared.statusBarStyle = .lightContent设置为View controller-based status bar appearanceYES的情况下测试了解决方案。

1 个答案:

答案 0 :(得分:2)

您遇到的问题是SELECT ada.*, ps.SomeColumn, ps.OhterColumn, . . . INTO #ADAPS135 FROM #ADA ada JOIN #PS135 PS ON PS.StudentID = ada.StudentID 不会将状态栏的选择推迟到其视图控制器上。

相反,对于导航控制器,可以通过调整其UINavigationController的{​​{1}}属性来设置状态栏样式。

如果将其设置为黑色样式,则状态栏将为浅色样式:

barStyle

请注意,这也会更改navigationBar的颜色,但是您仍然可以使用navigationController?.navigationBar.barStyle = .black 将条形的颜色设置为所需的颜色:

navigationBar

如果要进行全局更改,以使barTintColor所有实例使用相同的状态栏样式(如果您有多个选项卡且所有选项卡均使用导航,则很有用控制器),则可以在navigationController?.navigationBar.barTintColor = .purple 上添加扩展名并覆盖UINavigationController属性:

UINavigationController

最后一个选择是将选择推迟到导航控制器堆栈中的视图控制器。

为此,请覆盖导航控制器扩展的preferredStatusBarStyle属性,并使其返回extension UINavigationController { open override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } }

childViewControllerForStatusBarStyle

在这种情况下,您需要在所有视图控制器中覆盖topViewController(不是最佳方法,但是如果您需要基于每个子控制器的这种精细级别的控制,则可以选择此方法)。

所有这些解决方案都要求您将Info.plist中的extension UINavigationController { open override var childViewControllerForStatusBarStyle: UIViewController? { return topViewController } } 键设置为preferredStatusBarStyle