我想在iOS 13上的每个ViewController级别上更改状态栏样式。到目前为止,我没有任何运气。
我在info.plist中将UIUserInterfaceStyle
定义为Light
(因为我不想支持暗模式),并将UIViewControllerBasedStatusBarAppearance
设置为true
。 preferredStatusBarStyle
在我的ViewController上被调用,但被完全忽略。 UIUserInterfaceStyle
似乎总是覆盖VC首选项。
如何在iOS 13上使用每个ViewController状态栏样式?还是不再支持?
答案 0 :(得分:2)
我在iOS13上遇到了同样的问题,而在我的应用程序的iOS12上还不错。我有一个TabBarController,它包含3个NavigationBarControllers,我从以前的ViewController中展示TabBarController。我在演示时通过将.modalPresentationStyle设置为.fullScreen来修复它:
tabbarController.modalPresentationStyle = .fullScreen
也许它将以某种方式帮助您...
答案 1 :(得分:2)
在iOS13中,UIStatusBarStyle现在有一个.darkContent选项。对于黑色文本,请将其(而不是.default)用于preferredStatusBarStyle。
答案 2 :(得分:2)
iOS 13.2,Swift 5.1
对我来说,前面提到的解决方案无济于事。 5个小时后,我结束了 modalPresentationCapturesStatusBarAppearance标志。
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
}
}
答案 3 :(得分:0)
就我而言,我遇到了类似的问题,错误的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
}
}
}
答案 4 :(得分:-1)
在使用导航控制器的同时,我在iOS 13上遇到了同样的问题,我能够使用来更改状态栏的颜色
让navBarAppearance = UINavigationBarAppearance()
navigationBar.scrollEdgeAppearance = navBarAppearance
但是问题是当我使用当前控制器时,状态栏没有更改,我在顶视图控制器上使用了此代码
覆盖func viewDidAppear(_动画:布尔){
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”中使用颜色