2016-12-21 38 views
3

不確定是否可以,但是有沒有辦法根據時間更改狀態欄顏色?我用這個代碼擺弄:根據時間更改狀態欄顏色

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

我很好奇,如果您的解決方案確實有效。如果沒有,我添加了一個工作解決方案,我已經測試 – ronatory

回答

2

其他的答案不爲我工作,所以這是我工作的解決方案,對於這個answer

步驟1個添加下列內容info.plist

View controller-based status bar appearance與布爾值NO

enter image description here

步驟2在這個AppDelegate.swift添加到application(_:didFinishLaunchingWithOptions:)

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 
} 
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內的另一個方法是不會做任何事情。

+0

調整了一下,但它像一個魅力工作,謝謝 – Otheprogrammer

0

我用@ SeanLintern88方法,只是增加了「迴歸」

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

這真的適合你嗎?如果你只是設置'let hour = 1',以測試你的狀態欄是否是'.lightContent'?只是測試了代碼,對我來說它不起作用 – ronatory