反转,以swift标记

x33g5p2x  于 2023-03-07  发布在  Swift
关注(0)|答案(2)|浏览(94)

我想让我的文本在正常模式下显示为.white,在暗模式下显示为.black。我该怎么做?.label只会让文本在正常模式下显示为.black,在暗模式下显示为.white,但我想让它反过来。
有人能解决这个问题吗?

slsn1g29

slsn1g291#

let myLabelColor = UIColor(dynamicProvider: { $0.userInterfaceStyle == .dark ? .black : .white })
从iOS 13开始,UIColor有一个init(dynamicProvider:)
创建使用指定块动态生成其颜色数据的颜色对象。
https://developer.apple.com/documentation/uikit/uicolor/3238041-init
如果您要创建许多动态颜色,您可能希望进行一个方便的init-这样可以节省键入的时间,并且您的意图对读者来说更清楚:

extension UIColor {

    /// Creates a color object that responds to `userInterfaceStyle` trait changes.
    public convenience init(light: UIColor, dark: UIColor) {
      guard #available(iOS 13.0, *) else { self.init(cgColor: light.cgColor); return }
      self.init(dynamicProvider: { $0.userInterfaceStyle == .dark ? dark : light })
    }

}

用法:let myLabelColor = UIColor(light: .white, dark: .black)
(Note您可以使用提供的trait集合中的任何其他trait。例如,如果size类更改,您可以返回不同的颜色)

pcww981p

pcww981p2#

在我的资源中,我创建了一个新的“颜色集”。为选择白色为“任何外观”和黑色为“黑暗”。然后我给这个图像集命名,并称之为:

text.textColor = UIColor(named: "ImageSet1")

相关问题