实时更改状态栏颜色
Change Status Bar Color in Real Time
我正在带有动画的侧边菜单视图控制器 (ENSwiftSideMenu) 中移动。由于侧面菜单的背景颜色是深蓝色,我希望状态栏(默认情况下为黑色)在菜单可见时变亮。
在 info.plist
中将 View controller-based status bar appearance
设置为 YES
(也尝试过 NO
),我尝试实现以下代码,不幸的是,它不起作用:
UIApplication.shared.statusBarStyle = .lightContent
此外,我试过这个:
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}
知道如何让它发挥作用吗?
谢谢!
试试这个代码:
在您的 AppDelegate 中:
var navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] // If you want to change title colour
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
//用下面的代码更新你的 plist
View controller-based status bar appearance = NO
在你的ViewController中:
override func viewDidLoad() {
super.viewDidLoad()
// UIApplication.sharedApplication().statusBarStyle = .LightContent
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController?.navigationBar.translucent = true
}
func sideMenuWillOpen() {
print("sideMenuWillOpen")
UIApplication.sharedApplication().statusBarStyle = .LightContent
}
func sideMenuWillClose() {
print("sideMenuWillClose")
UIApplication.sharedApplication().statusBarStyle = .Default
}
上面的输出 code.You 可以使用某种 UIAnimation 来同步效果..
让我 know.If 代码适合你...
直接更新状态栏样式是deprecated,当启用基于视图控制器的状态栏外观时将不起作用。
相反,每个控制器都必须提供其首选状态栏样式,负责显示每个控制器的框架应实现 childViewControllerForStatusBarStyle
并为状态栏外观提供正确的子控制器。不幸的是,ENSwiftSideMenu
不支持它,因此您将很难通过基于视图控制器的状态栏外观来实现它。您应该向原始开发人员提出问题,但我建议您也改用编写得更好的框架。
我正在带有动画的侧边菜单视图控制器 (ENSwiftSideMenu) 中移动。由于侧面菜单的背景颜色是深蓝色,我希望状态栏(默认情况下为黑色)在菜单可见时变亮。
在 info.plist
中将 View controller-based status bar appearance
设置为 YES
(也尝试过 NO
),我尝试实现以下代码,不幸的是,它不起作用:
UIApplication.shared.statusBarStyle = .lightContent
此外,我试过这个:
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}
知道如何让它发挥作用吗?
谢谢!
试试这个代码:
在您的 AppDelegate 中:
var navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] // If you want to change title colour
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
//用下面的代码更新你的 plist
View controller-based status bar appearance = NO
在你的ViewController中:
override func viewDidLoad() {
super.viewDidLoad()
// UIApplication.sharedApplication().statusBarStyle = .LightContent
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController?.navigationBar.translucent = true
}
func sideMenuWillOpen() {
print("sideMenuWillOpen")
UIApplication.sharedApplication().statusBarStyle = .LightContent
}
func sideMenuWillClose() {
print("sideMenuWillClose")
UIApplication.sharedApplication().statusBarStyle = .Default
}
上面的输出 code.You 可以使用某种 UIAnimation 来同步效果..
让我 know.If 代码适合你...
直接更新状态栏样式是deprecated,当启用基于视图控制器的状态栏外观时将不起作用。
相反,每个控制器都必须提供其首选状态栏样式,负责显示每个控制器的框架应实现 childViewControllerForStatusBarStyle
并为状态栏外观提供正确的子控制器。不幸的是,ENSwiftSideMenu
不支持它,因此您将很难通过基于视图控制器的状态栏外观来实现它。您应该向原始开发人员提出问题,但我建议您也改用编写得更好的框架。