preferredStatusBarStyle 在 iOS 13 和其他中未被调用
preferredStatusBarStyle not getting called in iOS 13 and other
我的应用程序中有多个 UITabBar
,有些 ViewController
有白色状态栏,有些 ViewController
有黑色状态栏。
我的info.plist
View controller-based status bar appearance
到 YES
我的 Viewcontroller 有以下代码。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default //or return . lightContent
}
但 preferredStatusBarStyle
从未接到电话。
我也在我的控制器中写了下面一行 viewDidLoad
但上面仍然没有被调用。
self.setNeedsStatusBarAppearanceUpdate()
我也将 controller-based status bar appearance
更改为 YES
&& NO
多次检查,但对我没有任何帮助。
我也尝试了以下解决方案和其他 Whosebug 答案,但没有任何帮助。
编辑
我试过下面的代码,returns 我是 topViewController
,它会调用 ViewController
的 preferredStatusBarStyle
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
所以一旦 topViewController
找到它就会调用那个特定 ViewController
的 preferredStatusBarStyle
。
但问题是它没有在 UITabBarController
-> UINavigationController
-> UIViewController
.
中被调用
要求
我有 2 个不同的 TabBarController
。
第一个 TabBarController
statusBarStyle 是 .lightContent
。
第二个 TabBarController
statusBarStyle 在不同的控制器中是 .lightContent
和 .default
。
当我切换到第二个 TabBarController 时,它将调用第二个 TabBarController
的 preferredStatusBarStyle
并且所有 ViewController
statusBarStyle 变为 .default
但我的一些控制器 statusBarStyle 想要.ligthContent
我怎样才能做到这一点?
任何帮助将不胜感激。
谢谢
请参考这个
override var modalPresentationCapturesStatusBarAppearance: Bool {
set {}
get{
return true
}
}
the following may be of assistance to you;
For developer guidance, see the UIStatusBarStyle constant in
UIApplicenter code hereation and the preferredStatusBarStyle
property in UIViewController.
我找到了解决方案。
输入下面的代码找到topViewController
。
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
所以一旦它找到 topViewController
,下面的代码将在您当前的 ViewController
中调用,您可以根据要求设置 statusBarStyle
。
override var preferredStatusBarStyle: UIStatusBarStyle { }
在我的例子中,我有 2 个 TabBar
。
第一个 TabBar
个控制器属于 .lightContent
,第二个 TabBar
个控制器属于 .default
,因此创建 2 个 UITabBarController
。第一个用于 .lightContent
,第二个用于 .default
,然后将 preferredStatusBarStyle
放入其中。
所以当你在 UITabBarController
子控制器时,你的 UITabBarController
preferredStatusBarStyle
会被调用并且子控制器 statusBarStyle
会根据你的设置样式进行设置。
这与iOS13无关。你只是规则错误。
在导航控制器的情况下,状态栏的颜色不是由视图控制器的 preferredStatusBarStyle 决定的。
居然是由导航栏的barStyle决定的。要获取灯光状态栏文本,请说(在您的视图控制器中):
self.navigationController?.navigationBar.barStyle = .black
我的应用程序中有多个 UITabBar
,有些 ViewController
有白色状态栏,有些 ViewController
有黑色状态栏。
我的info.plist
View controller-based status bar appearance
到 YES
我的 Viewcontroller 有以下代码。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default //or return . lightContent
}
但 preferredStatusBarStyle
从未接到电话。
我也在我的控制器中写了下面一行 viewDidLoad
但上面仍然没有被调用。
self.setNeedsStatusBarAppearanceUpdate()
我也将 controller-based status bar appearance
更改为 YES
&& NO
多次检查,但对我没有任何帮助。
我也尝试了以下解决方案和其他 Whosebug 答案,但没有任何帮助。
编辑
我试过下面的代码,returns 我是 topViewController
,它会调用 ViewController
preferredStatusBarStyle
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
所以一旦 topViewController
找到它就会调用那个特定 ViewController
的 preferredStatusBarStyle
。
但问题是它没有在 UITabBarController
-> UINavigationController
-> UIViewController
.
要求
我有 2 个不同的 TabBarController
。
第一个 TabBarController
statusBarStyle 是 .lightContent
。
第二个 TabBarController
statusBarStyle 在不同的控制器中是 .lightContent
和 .default
。
当我切换到第二个 TabBarController 时,它将调用第二个 TabBarController
的 preferredStatusBarStyle
并且所有 ViewController
statusBarStyle 变为 .default
但我的一些控制器 statusBarStyle 想要.ligthContent
我怎样才能做到这一点?
任何帮助将不胜感激。
谢谢
请参考这个
override var modalPresentationCapturesStatusBarAppearance: Bool {
set {}
get{
return true
}
}
the following may be of assistance to you;
For developer guidance, see the UIStatusBarStyle constant in UIApplicenter code hereation and the preferredStatusBarStyle property in UIViewController.
我找到了解决方案。
输入下面的代码找到topViewController
。
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
所以一旦它找到 topViewController
,下面的代码将在您当前的 ViewController
中调用,您可以根据要求设置 statusBarStyle
。
override var preferredStatusBarStyle: UIStatusBarStyle { }
在我的例子中,我有 2 个 TabBar
。
第一个 TabBar
个控制器属于 .lightContent
,第二个 TabBar
个控制器属于 .default
,因此创建 2 个 UITabBarController
。第一个用于 .lightContent
,第二个用于 .default
,然后将 preferredStatusBarStyle
放入其中。
所以当你在 UITabBarController
子控制器时,你的 UITabBarController
preferredStatusBarStyle
会被调用并且子控制器 statusBarStyle
会根据你的设置样式进行设置。
这与iOS13无关。你只是规则错误。
在导航控制器的情况下,状态栏的颜色不是由视图控制器的 preferredStatusBarStyle 决定的。
居然是由导航栏的barStyle决定的。要获取灯光状态栏文本,请说(在您的视图控制器中):
self.navigationController?.navigationBar.barStyle = .black