通过在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 appearance
和YES
的情况下测试了解决方案。
答案 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
。