【问题标题】:changing status bar color depending on time根据时间更改状态栏颜色
【发布时间】:2016-12-21 16:59:23
【问题描述】:

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

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()
    }
}

【问题讨论】:

  • 我很好奇您的解决方案是否真的有效。如果没有,我添加了一个我已经测试过的可行解决方案

标签: ios swift statusbar


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    是的,但只是实现和 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 放在另一个不会做任何事情的方法中。

    【讨论】:

    • 稍微调整了一下,但效果很好,谢谢
    【解决方案3】:

    我使用@SeanLintern88 方法,只是添加了“return”

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

    【讨论】:

    • 这真的适合你吗?如果你只是设置let hour = 1,来测试你的状态栏是不是.lightContent呢?刚刚测试了代码,对我来说它不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2015-05-09
    • 2022-01-20
    • 2015-09-26
    • 2016-11-04
    相关资源
    最近更新 更多