如何更改状态栏样式 - iOS 12
How to change status bar style - iOS 12
我需要根据背景颜色更新每个视图控制器的状态栏样式(UINavigationController
自动执行的操作)。
已经尝试了 Whosebug 上描述的所有选项(info.plist
中的 View controller-based status bar appearance
设置为 YES),但 none 对我有用。
我正在使用 Xcode 10 beta 6 和 Swift 4.2,目标是 iOS 12.
在 info.plist
中将 View controller-based status bar appearance
设置为 NO
并在每个视图控制器中覆盖 preferredStatusBarStyle
,如下所示:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
然后在您的视图控制器中调用 setNeedsStatusBarAppearanceUpdate()
(例如在 viewDidLoad()
中)。
Swift 4+, iOS 12+
View controller-based status bar appearance
现在需要在 info.plist
中设置为 YES
因为 UIKit 不再希望我们通过 UIApplication.shared
编辑状态栏样式——状态栏样式现在是基于视图控制器。
然后,如果您希望在应用程序级别应用更改,只需在适当的容器视图控制器(最好是根视图控制器)中覆盖 preferredStatusBarStyle
...
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
...这将传播到它下面的所有视图控制器。如果您想为每个视图控制器编辑状态栏样式,请为每个视图控制器应用此覆盖。
如果状态栏样式在运行时发生变化,那么您需要调用 setNeedsStatusBarAppearanceUpdate()
(从 container/root 视图控制器或该特定视图控制器中的任何位置),否则不需要。
如果您将 info.plist
中的 View controller-based status bar appearance
设置为 YES 并且您的视图控制器嵌入到 UINavigationController
中,那么您的导航控制器将负责更新栏样式(通过navigationController.navigationBar.barStyle
)并且preferredStatusBarStyle
属性将被忽略
我有 Xcode 10.2,发现在 info.plist 中将基于视图控制器的状态栏外观设置为 "YES" 根本不会改变状态栏样式。
但是,我确实发现更改 info.plist 文件中的两个键将完成将状态栏更改为浅色或深色的所有工作,而无需任何额外编码。
这是我自己修复它的方法
将鼠标悬停在 info.plist 文件的第一行 "Information Property List" 上时,会出现一个小的圆形“+”按钮。单击此按钮并滚动项目,直到找到以下键。
查看基于控制器的状态栏外观 [将此值设置为] NO
状态栏样式 [将此值设置为] UIStatusBarStyleLightContent
注意:在值列表中找不到 UIStatusBarStyleLightContent 作为可选项目,必须在值框中键入。
我希望这对您或其他正在寻找此问题答案的人有所帮助。
如果你被包裹在导航控制器中,你将需要这个:
final class LightNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
override func viewDidLoad(){
super.viewDidLoad()
navigationController?.navigationBar.barStyle = .default
}
override var prefersStatusBarHidden: Bool {
return true
}
我也在同一屏幕上应用了滚动视图,通过这段代码能够解决状态栏问题。
我需要根据背景颜色更新每个视图控制器的状态栏样式(UINavigationController
自动执行的操作)。
已经尝试了 Whosebug 上描述的所有选项(info.plist
中的 View controller-based status bar appearance
设置为 YES),但 none 对我有用。
我正在使用 Xcode 10 beta 6 和 Swift 4.2,目标是 iOS 12.
在 info.plist
中将 View controller-based status bar appearance
设置为 NO
并在每个视图控制器中覆盖 preferredStatusBarStyle
,如下所示:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
然后在您的视图控制器中调用 setNeedsStatusBarAppearanceUpdate()
(例如在 viewDidLoad()
中)。
Swift 4+, iOS 12+
View controller-based status bar appearance
现在需要在 info.plist
中设置为 YES
因为 UIKit 不再希望我们通过 UIApplication.shared
编辑状态栏样式——状态栏样式现在是基于视图控制器。
然后,如果您希望在应用程序级别应用更改,只需在适当的容器视图控制器(最好是根视图控制器)中覆盖 preferredStatusBarStyle
...
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
...这将传播到它下面的所有视图控制器。如果您想为每个视图控制器编辑状态栏样式,请为每个视图控制器应用此覆盖。
如果状态栏样式在运行时发生变化,那么您需要调用 setNeedsStatusBarAppearanceUpdate()
(从 container/root 视图控制器或该特定视图控制器中的任何位置),否则不需要。
如果您将 info.plist
中的 View controller-based status bar appearance
设置为 YES 并且您的视图控制器嵌入到 UINavigationController
中,那么您的导航控制器将负责更新栏样式(通过navigationController.navigationBar.barStyle
)并且preferredStatusBarStyle
属性将被忽略
我有 Xcode 10.2,发现在 info.plist 中将基于视图控制器的状态栏外观设置为 "YES" 根本不会改变状态栏样式。
但是,我确实发现更改 info.plist 文件中的两个键将完成将状态栏更改为浅色或深色的所有工作,而无需任何额外编码。
这是我自己修复它的方法
将鼠标悬停在 info.plist 文件的第一行 "Information Property List" 上时,会出现一个小的圆形“+”按钮。单击此按钮并滚动项目,直到找到以下键。
查看基于控制器的状态栏外观 [将此值设置为] NO
状态栏样式 [将此值设置为] UIStatusBarStyleLightContent
注意:在值列表中找不到 UIStatusBarStyleLightContent 作为可选项目,必须在值框中键入。
我希望这对您或其他正在寻找此问题答案的人有所帮助。
如果你被包裹在导航控制器中,你将需要这个:
final class LightNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
override func viewDidLoad(){
super.viewDidLoad()
navigationController?.navigationBar.barStyle = .default
}
override var prefersStatusBarHidden: Bool {
return true
}
我也在同一屏幕上应用了滚动视图,通过这段代码能够解决状态栏问题。