【问题标题】:Change Status Bar Color in Real Time实时更改状态栏颜色
【发布时间】:2016-10-15 13:01:49
【问题描述】:

我正在一个带有动画的侧边菜单视图控制器 (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
}

知道如何让它工作吗?
谢谢!

【问题讨论】:

  • 如果我理解正确。你希望你的 ENSwiftSideMenu 状态栏为深蓝色,而 mainVC 状态栏为正常或差异颜色...
  • 不,我希望显示侧边菜单时状态栏为白色。
  • 代码再次更新。希望,这次我理解正确......

标签: ios swift uiviewcontroller statusbar


【解决方案1】:

试试这个代码:

在您的 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

在您的视图控制器中:

    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 
}

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

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

【讨论】:

  • 感谢您的努力,但我不想让状态栏有背景,而是让状态栏的内容真正变亮。
【解决方案2】:

直接更新状态栏样式为deprecated,开启基于视图控制器的状态栏外观时无效。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2015-05-09
    • 2015-09-26
    • 2016-11-04
    • 2017-02-02
    • 2021-11-05
    相关资源
    最近更新 更多