我想在 iOS 13 上更改每个视图控制器级别的状态栏样式。到目前为止,我没有任何运气。
我将UIUserInterfaceStyle
定义为 info.plist 中的Light
(因为我不想支持暗模式(并将UIViewControllerBasedStatusBarAppearance
设置为true
.preferredStatusBarStyle
在我的视图控制器上被调用,但完全被忽略。UIUserInterfaceStyle
似乎总是覆盖 VC 首选项。 如何在 iOS 13 上获得每视图控制器状态栏样式?还是不再支持它?
iOS 13.2, Swift 5.1
对我来说,前面提到的解决方案没有任何效果。5小时后,我最终 模态演示捕获状态栏外观标志 。
destinationNavigationController.modalPresentationCapturesStatusBarAppearance = true
sourceViewController.present(destinationNavigationController, animated: animated, completion: nil)
在此之后,preferredStatusBarStyle
被召集到呈现的VC中。
override var preferredStatusBarStyle: UIStatusBarStyle {
if #available(iOS 13.0, *) {
if traitCollection.userInterfaceStyle == .light {
return .darkContent
} else {
return .lightContent
}
} else {
return .lightContent
}
}
我在 iOS13 上遇到了同样的问题,而我的应用程序在 iOS12 上很好。我有一个 TabBarController 它容纳 3 个 NavigationBarController,我展示了来自以前的 ViewController 的 TabBarController。我通过在演示时将 .modalPresentationStyle 设置为 .fullScreen 来修复它:
tabbarController.modalPresentationStyle = .fullScreen
也许它会以某种方式帮助你...
在iOS13中,UIStatusBarStyle现在有一个.darkContent选项。对于黑色文本,请使用此选项(而不是 .default(作为首选状态栏样式。
就我而言,我遇到了类似的错误UIStatusBarStyle
问题。对于我的应用程序中的某些视图控制器,我需要设置一个深色状态栏样式,忽略当前的系统颜色模式。问题是我使用了.default
值,但在 iOS 13 中它会根据上下文而变化。这就是为什么我添加了一个小的解决方法来处理iOS 12和iOS 13 +案例的原因。
private extension UIStatusBarStyle {
static var darkContentWorkaround: UIStatusBarStyle {
if #available(iOS 13.0, *) {
return .darkContent
} else {
return .default
}
}
}
我在 iOS 13 上使用导航控制器时遇到了同样的问题,我能够使用
let navBarAppearance = UINavigationBarAppearance((
导航栏.滚动边缘外观 = 导航栏外观
但问题是当我使用当前控制器时,状态栏没有改变我在顶视图控制器上使用此代码
override func viewDidAppear(_ animated: Bool( {
if #available(iOS 13, *)
{
let statusBar = UIView(frame: (UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame)!)
statusBar.backgroundColor = UIColor.systemBackground
UIApplication.shared.keyWindow?.addSubview(statusBar)
}
}
您可以在"UIColor.systemBackground"中使用您的颜色