EvG*_*yin 5 uistatusbar ios13 ios-darkmode
我将whilebackgroundColor NavigationBar和darktextColor用于statusBar,但是当用户将主题iOS更改为深色时,我的textColor statusBar更改为while,而while我的backgroundColor上NavigationBar则看不到任何东西。如何为我的应用禁用此更改?
And*_*rna 10
UINavigationController是UIViewController(谁知道的)的子类!
因此,在呈现嵌入在导航控制器中的视图控制器时,您并不是真正在呈现嵌入式视图控制器。您正在展示导航控制器!UINavigationController,作为的子类UIViewController继承preferredStatusBarStyle和childForStatusBarStyle,您可以根据需要设置。
以下任何一种方法都可以工作:
info.plist,添加以下属性:
UIUserInterfaceStyle(又名“用户界面样式”)preferredStatusBarStyle在内部覆盖UINavigationController
preferredStatusBarStyle(doc)-视图控制器的首选状态栏样式子类或扩展 UINavigationController
class MyNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
}
Run Code Online (Sandbox Code Playgroud)
要么
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
}
Run Code Online (Sandbox Code Playgroud)childForStatusBarStyle在内部覆盖UINavigationController
childForStatusBarStyle(doc)-在系统需要视图控制器来确定状态栏样式时调用“如果您的容器视图控制器从其子视图控制器之一派生其状态栏样式,请[覆盖此属性]并返回该子视图控制器。如果您返回nil或不重写此方法,则使用self的状态栏样式如果此方法的返回值发生更改,请调用setNeedsStatusBarAppearanceUpdate()方法。”
子类或扩展 UINavigationController
class MyNavigationController: UINavigationController {
override var childForStatusBarStyle: UIViewController? {
topViewController
}
}
Run Code Online (Sandbox Code Playgroud)
要么
extension UINavigationController {
open override var childForStatusBarStyle: UIViewController? {
topViewController
}
}
Run Code Online (Sandbox Code Playgroud)您可以返回上面想要的任何视图控制器。我建议以下之一:
注意:如果决定子类化UINavigationController,请记住通过IB中的身份检查器将该类应用于导航控制器。
PS我的代码使用Swift 5.1语法
如果您将UIViewControllerBasedStatusBarAppearance应用程序的密钥设置info.plist为YES,则可以在当前显示的视图控制器中覆盖状态栏样式:
override var preferredStatusBarStyle: UIStatusBarStyle {
if #available(iOS 13, *) {
return .darkContent
} else {
return .default
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将扩展名写入UIStatusBarStyle:
extension UIStatusBarStyle {
static var black: UIStatusBarStyle {
if #available(iOS 13.0, *) {
return .darkContent
}
return .default
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以轻松地在你的 ViewControllers 中使用:
override var preferredStatusBarStyle: UIStatusBarStyle {
.black
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |