根据时间更改状态栏颜色

时间:2016-12-21 16:59:24

标签: ios swift statusbar

不确定是否可行,但有没有办法根据时间更改状态栏颜色?我正在摆弄这段代码:

import UIKit

class testTimeController: UIViewController{

func lightstatusbar() {
var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
 }
}

  func darkstatusbar() {
var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}
}

override func viewDidLoad() {
    super.viewDidLoad()
let hour = NSCalendar.current.component(.hour, from: NSDate() as Date)

 switch hour{
    case 1..<6: lightstatusbar()
        break
    case 7..<18: darkstatusbar()
        break
    case 19..<24: lightstatusbar()
        break
    default: darkstatusbar()
    }
}

3 个答案:

答案 0 :(得分:2)

其他答案对我不起作用,所以这是我的工作解决方案,关于这个answer

第1步将以下内容添加到info.plist

带有布尔值View controller-based status bar appearance

NO

enter image description here

第2步将其添加到application(_:didFinishLaunchingWithOptions:)中的AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

  let hour = NSCalendar.current.component(.hour, from: NSDate() as Date)

  switch hour {
  case 1..<6:
    UIApplication.shared.statusBarStyle = .lightContent
  case 7..<18:
    UIApplication.shared.statusBarStyle = .default
  case 19..<24:
    UIApplication.shared.statusBarStyle = .lightContent
  default:
    UIApplication.shared.statusBarStyle = .default
  }

  return true
}

答案 1 :(得分:0)

是的,而只是实现和ovveride

override var preferredStatusBarStyle: UIStatusBarStyle {
    let hour = NSCalendar.current.component(.hour, from: NSDate() as Date)

     switch hour{
    case 1..<6: .lightContent
        break
    case 7..<18: .darkContent
        break
    case 19..<24: .lightContent
        break
    default: .darkContent
}

不要将var放在另一个不做任何事情的方法中。

答案 2 :(得分:0)

我使用@ SeanLintern88方法,只是添加&#34;返回&#34;

override var preferredStatusBarStyle: UIStatusBarStyle {
    let hour = NSCalendar.current.component(.hour, from: NSDate() as Date)

    switch hour{
    case 1..<6: return.lightContent

    case 7..<18: return.default

    case 19..<24: return.lightContent

    default: return.default
    }
}