2

Apple 建议使用系统颜色来自动调整应用程序以适应明暗模式,例如:

myLabel.textColor = UIColor.secondaryLabel

此处Apple 列出了要使用的各种属性,例如上面示例中的属性,以及背景、占位符文本等的系统颜色。

但它没有列出UIButton元素的属性。

我们应该使用哪个属性或其他方法来使 UIButtons 适应主题变化?

截至目前,我正在这样做:

myButton.tintColor = UIColor.link

这应该是用于链接的,但它是我发现的唯一“可点击”属性。

我不想使用类似的东西UIColor.systemRed,而是类似的东西UIColor.systemBackground,它会自动适应当前的主题。

4

2 回答 2

1

使用您喜欢的任何系统颜色。它们都是自适应的。我将系统灰色应用于按钮的文本:

在此处输入图像描述

在此处输入图像描述

当我们在明暗模式之间切换时,颜色会发生变化。

于 2019-06-20T03:00:36.977 回答
1

我希望您不要一个一个地创建彩色资产。您可以使用此函数将图像着色为 UIImageView 的扩展。我也对按钮使用相同的技术。

func setImageAndColor(image: UIImage, color: UIColor) {
    let templateImage = image.withRenderingMode(.alwaysTemplate)
    self.image = templateImage
    self.tintColor = color
}

如果您想定义所有自己的颜色,我建议创建一个名为 Colors 的单例类:

import UIKit

class Colors {

static let shared = Colors()

var statusBarStyle: UIStatusBarStyle = .lightContent

private init(){}

func setLightColors() {
    statusBarStyle = .darkContent

    yourColor = UIColor( // choose your favorite color
    styleColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 1)//white

    labelColor            = UIColor(red: 15/255, green: 15/255, blue: 15/255, alpha: 1)
    subLabelColor         = UIColor(red: 25/255, green: 25/255, blue: 25/255, alpha: 1)

............从这里设置所有颜色的值。

}
func setDarkColors() {
    statusBarStyle = .lightContent

    yourColor = // choose your favorite color

............
}
// set initial colors
var yourColor:          UIColor = 
}

如果有人对整个颜色课程感兴趣,请给我发短信或在下面发表评论。

我通过以下方式访问颜色单例:Colors.shared.yourColor

同样对于第一个配置,我在第一个 VC 中设置了暗模式编号(0-Auto;1-On;2-Off):

if darkmodeNumber == 0 {
    if traitCollection.userInterfaceStyle == .light {
        print("Light mode")
        Colors.shared.setLightColors()
    } else {
        print("Dark mode")
        Colors.shared.setDarkColors()
    }
} else if darkmodeNumber == 1 {
    Colors.shared.setDarkColors()
} else if modeNumber == 2 {
    Colors.shared.setLightColors()
}
}

然后状态栏也应该以正确的方式改变。

于 2020-05-09T12:27:32.080 回答