首页 > 解决方案 > tintColor 未在主题中更新为默认值

问题描述

我有一个自定义图标(.png 图像)作为条形按钮,我将使用 Theme.swift 文件为 1 个特定视图控制器设置资产颜色/背景颜色,但由于某种原因,色调颜色没有更新。

它目前是添加到我的资产文件夹时使用的深灰色,但根据我的 Theme.swift 应该显示为绿色。有谁知道这可能不会更新为新的默认绿色的原因:

在此处输入图像描述

在我正在寻找主题的视图控制器的 viewDidLoad 中,我添加了

Theme.current.apply()

这是我的 Theme.swift 文件,默认为绿色:

import UIKit

enum Theme: Int {
    //1
    case `default`, dark, graphical

    //2
    private enum Keys {
        static let selectedTheme = "SelectedTheme"
    }

    //3
    static var current: Theme {
        let storedTheme = UserDefaults.standard.integer(forKey: Keys.selectedTheme)
        return Theme(rawValue: storedTheme) ?? .default
    }

    var mainColor: UIColor {
        switch self {
        case .default:
            print("/default")
            return UIColor(red: 87.0/255.0, green: 188.0/255.0, blue: 95.0/255.0, alpha: 1.0)
        case .dark:
            return UIColor(red: 255.0/255.0, green: 115.0/255.0, blue: 50.0/255.0, alpha: 1.0)
        case .graphical:
            return UIColor(red: 10.0/255.0, green: 10.0/255.0, blue: 10.0/255.0, alpha: 1.0)
        }
    }


func apply() {

    //2
    UIApplication.shared.delegate?.window??.tintColor = mainColor
}
}

/default 甚至可以在我的控制台中打印,但颜色不会更新。

标签: iosswift

解决方案


在这里,图像问题renderingMode。如果要应用于tintColor图像,则必须使用图像渲染模式作为alwaysTemplate.

可以使用两种方法设置图像渲染模式。

以编程方式

if let myImage = UIImage(named: "myImage") {
    let tintableImage = myImage.withRenderingMode(.alwaysTemplate)
    imageView.image = tintableImage
}

从资产

在此处输入图像描述


推荐阅读