我想改变状态栏的颜色之间.lightContent和.default动态(因为我的背景可以在同一个视图控制器改变).
我试图为此创建一个看起来像这样的函数:
func changeStatusBar(useDefault: Bool) {
if useDefault {
var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}
} else {
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
setNeedsStatusBarAppearanceUpdate()
}
Run Code Online (Sandbox Code Playgroud)
但没有运气.我在网上找到的每个指南(或者在Stackoverflow上)都只显示了如何更改statusBar,而不是通过函数打开和关闭.
我也设置View controller-based status bar appearance到NO了在info.plist文件中.
我以前使用的UIApplication.shared.statusBarStyle = .lightContent那条线是- 但是因为自iOS9以来不推荐使用它,所以我再也不能使用它了.
任何人都知道如何动态更改它?
Raj*_*r R 22
创建一个类型为UIStatusBarStyle的全局变量并将其返回 UIStatusBarStyle
您可以随时根据需要更改其值 preferredStatusBarStyle
class ViewController: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return self.style
}
var style:UIStatusBarStyle = .default
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func changeStyle(_ sender: UIButton) {
if self.style == .lightContent {
self.style = .default
} else {
self.style = .lightContent
}
setNeedsStatusBarAppearanceUpdate()
}
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)override var preferredStatusBarStyle: UIStatusBarStyle { return self.style }如果已将视图控制器嵌入导航控制器,则不会调用您应该更改导航控制器的条形样式
Run Code Online (Sandbox Code Playgroud)self.navigationController?.navigationBar.barStyle = //newStyle
小智 5
我希望下面的代码将用于您的需要(对于 Swift4):
override func viewDidLoad() {
super.viewDidLoad()
let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView
if statusBar?.responds(to: #selector(setter: UIView.backgroundColor)) ?? false {
statusBar?.backgroundColor = .green
}
}
Run Code Online (Sandbox Code Playgroud)
或者,你可以试试这个:
if let StatusbarView = UIApplication.shared.value(forKey: "statusBar") as? UIView {
StatusbarView.backgroundColor = .green
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10663 次 |
| 最近记录: |