问题描述
我正在尝试将某些视图控制器上的状态栏文本更改为白色,但在另一些视图控制器上,仍然需要将其更改为黑色。 (因此无法在整个应用程序中进行全局更改)。
除头几秒钟外,一切都正常,除了在单击不同的选项卡栏时出现故障时,状态栏文本的一半变为黑色而不是白色。然后一切都会完美更新。
结构如下: 一个带有几个标签的标签栏控制器,每个标签包含一个导航控制器,并包含一个视图控制器。
要使用导航控制器,必须更改navigationController?.navigationBar.barStyle = .black
才能使其正常工作。
在选项卡上按几次后,它可以正常工作。
我当然要做的第一件事是将YES
中的View controller-based status bar appearance
设置为.plist
我还重写了preferredStatusBarStyle,使用一个布尔值来设置哪些视图控制器应具有白色或黑色状态栏文本:
override var preferredStatusBarStyle: UIStatusBarStyle {
return colorednavigationBar ? .lightContent : .default
}
var colorednavigationBar: Bool = true
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if colorednavigationBar {
navigationController?.navigationBar.barStyle = .black
} else {
navigationController?.navigationBar.barStyle = .default
}
setNeedsstatusBarappearanceUpdate()
}
粘贴的代码来自各处使用的基本视图控制器。
解决方法
是的! @matt是正确的,谢谢。确实,使用标签栏时iOS会感到困惑。
解决方案是将其添加到TabBarController:
override public var childForStatusBarStyle: UIViewController? {
if let controller = selectedViewController as? UINavigationController {
return controller.visibleViewController
}
return selectedViewController
}