adr*_*din 2 iphone uikit ios swift
我能够通过设置启动屏幕上的状态栏隐藏Status bar is initially hidden,以YES在Info.plist中,然后我想表明它与我的第一个视图控制器上.lightContent的风格。
但是UIApplication.shared.statusBarStyle = .lightContent,自 iOS 9 起已弃用(所以我不想使用它)并使用以下代码在我的第一个视图控制器上给我一个黑色状态栏。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Run Code Online (Sandbox Code Playgroud)
当我的第一个视图控制器加载时如何更改状态栏样式?
我试图找到一个全局解决方案,UIApplication.shared.statusBarStyle = .lightContent因为我真的不想为每个视图控制器设置状态栏样式。我已经使用View controller-based status bar appearanceset toYES和测试了解决方案NO。
您遇到的问题是UINavigationController 不会将状态栏的选择推迟到其视图控制器。
相反,对于导航控制器,可以通过调整barStyle其navigationBar.
如果设置为黑色样式,则状态栏将是浅色样式:
navigationController?.navigationBar.barStyle = .black
Run Code Online (Sandbox Code Playgroud)
请注意,这也会更改 的颜色navigationBar,但是您仍然可以使用 将栏的颜色设置为您想要的任何颜色barTintColor:
navigationController?.navigationBar.barTintColor = .purple
Run Code Online (Sandbox Code Playgroud)
如果要进行全局更改,以便所有实例都UINavigationController使用相同的状态栏样式(如果您有多个选项卡都使用导航控制器,则很有用),那么您可以添加扩展UINavigationController并覆盖该preferredStatusBarStyle属性:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Run Code Online (Sandbox Code Playgroud)
最后一个选项是将选择推迟到导航控制器堆栈中的视图控制器。
为此,请覆盖childViewControllerForStatusBarStyle导航控制器扩展的属性并让它返回topViewController:
extension UINavigationController {
open override var childViewControllerForStatusBarStyle: UIViewController? {
return topViewController
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要preferredStatusBarStyle在所有视图控制器中进行覆盖(不是最佳方法,但如果您需要在每个子控制器的基础上进行这种细粒度的控制,这是一个选项)。
所有这些解决方案都要求您将View controller-based status bar appearanceInfo.plist中的密钥设置为YES.
| 归档时间: |
|
| 查看次数: |
4396 次 |
| 最近记录: |