用开关改变UITabBar样式



我正在尝试切换暗模式。我从这个教程(链接)开始,但是我不能改变标签栏的样式。导航栏的样式改变了,但选项栏保持不变。

如何在不重新启动应用程序的情况下改变选项栏的外观?

更新#1:这是我使用的代码

import UIKit
enum Theme: Int {
    case Light, Dark
    var barStyle: UIBarStyle {
        switch self {
        case .Light:
            return .Default
        case .Dark:
            return .Black
        }
    }
    var backgroundColor: UIColor {
        switch self {
        case .Light:
            return UIColor(red:0.95, green:0.95, blue:0.95, alpha:1.00)
        case .Dark:
            return UIColor(red:0.12, green:0.12, blue:0.12, alpha:1.00)
        }
    }
    var cellBackgroundColor: UIColor {
        switch self {
        case .Light:
            return UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.00)
        case .Dark:
            return UIColor(red:0.15, green:0.15, blue:0.15, alpha:1.00)
        }
    }
    var labelColor: UIColor {
        switch self {
        case .Light:
            return UIColor(red:0.12, green:0.12, blue:0.12, alpha:1.00)
        case .Dark:
            return UIColor(red:0.99, green:0.99, blue:0.99, alpha:1.00)
        }
    }
    var buttonColor: UIColor {
        switch self {
        case .Light:
            return UIColor(red:0.22, green:0.59, blue:0.95, alpha:1.00)
        case .Dark:
            return UIColor(red:0.22, green:0.59, blue:0.95, alpha:1.00)
        }
    }
    var separatorColor: UIColor {
        switch self {
        case .Light:
            return UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.00)
        case .Dark:
            return UIColor(red:0.22, green:0.22, blue:0.22, alpha:1.00)
        }
    }
    var tintColor: UIColor {
        switch self {
        case .Light:
            return UIColor(red:0.62, green:0.62, blue:0.62, alpha:1.00)
        case .Dark:
            return UIColor(red:0.50, green:0.50, blue:0.50, alpha:1.00)
        }
    }
}
class ThemeManager {
    static func currentTheme() -> Theme {
        if(NSUserDefaults.standardUserDefaults().boolForKey("darkMode")){
            return .Dark
        } else {
            return .Light
        }
    }
    static func applyTheme(theme: Theme) {
        if(theme == .Dark){
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "darkMode")
        } else {
            NSUserDefaults.standardUserDefaults().setBool(false, forKey: "darkMode")
        }
        NSUserDefaults.standardUserDefaults().synchronize()
        let sharedApplication = UIApplication.sharedApplication()
        sharedApplication.delegate?.window??.tintColor = theme.buttonColor
        UINavigationBar.appearance().barStyle = theme.barStyle
        UITabBar.appearance().barStyle = theme.barStyle
        UITabBar.appearance().barTintColor = theme.labelColor
        UINavigationBar.appearance().tintColor = theme.labelColor
        UITableViewCell.appearance().backgroundColor = theme.cellBackgroundColor
        UIStepper.appearance().tintColor = theme.tintColor
        UIActivityIndicatorView.appearance().tintColor = theme.tintColor
        UIButton.appearance().tintColor = theme.buttonColor
        UILabel.appearance().textColor = theme.labelColor
    }
}

当交换机状态改变时,我调用ThemeManager.applyTheme(.Dark || .Light)

UIAppearance代理仅影响新初始化的视图。在UIAppearance上设置颜色和样式不会对已经可见的视图产生影响。

你必须在ViewController中手动设置:

self.tabBarController?.tabBar.barStyle = .Black

最新更新