实时更改状态栏颜色

时间:2016-10-15 13:01:49

标签: ios swift uiviewcontroller statusbar

我正在使用动画在侧面菜单视图控制器(ENSwiftSideMenu)中移动。由于侧边菜单的背景颜色是深蓝色,我希望状态栏(默认为黑色)在菜单可见时转向。 在View controller-based status bar appearance内将YES设置为NO(也尝试info.plist)后,我尝试实施以下代码,但遗憾的是,该代码无效:

UIApplication.shared.statusBarStyle = .lightContent

另外,我试过这个:

override func viewDidLoad() {
    super.viewDidLoad()
    setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

知道如何使其发挥作用吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

试用此代码:

在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 
}

enter image description here

从上面的代码输出。您可以使用某种UIAnimation来同步效果..

让我知道。如果代码适合您......

答案 1 :(得分:0)

直接更新状态栏样式为deprecated,并且在启用基于视图控制器的状态栏外观时不起作用。

相反,每个控制器必须提供其首选状态栏样式,负责显示每个控制器的框架应实现childViewControllerForStatusBarStyle并为状态栏外观提供正确的子控制器。遗憾的是,ENSwiftSideMenu不支持这一点,因此您将很难通过基于视图控制器的状态栏外观实现此功能。您应该向原始开发人员提出一个问题,但我建议您切换到更好的书面框架。