获取资产中声明的颜色的浅色或深色变体

Posted

技术标签:

【中文标题】获取资产中声明的颜色的浅色或深色变体【英文标题】:Get light or dark variant of a color declared in assets 【发布时间】:2020-03-16 16:40:03 【问题描述】:

在我的资产中,我已经为浅色和深色外观声明了两种变体的主题颜色,效果很好。但是,我在应用程序中有一个特定位置,无论是否启用暗模式,我都需要使用颜色的浅色变体。除了将相同的颜色声明为只有一个变体的单独颜色之外,还有其他方法可以在代码中获取该颜色吗?

【问题讨论】:

developer.apple.com/documentation/uikit/uicolor/… 【参考方案1】:

在 SwiftUI 中,如果需要为某些子视图使用灯光变体,则强制为其指定 .colorScheme 就足够了,如下所示

颜色变体:

演示:

var body: some View 
    VStack 
        Rectangle().fill(Color("testColor"))
            .frame(width: 100, height: 100)
            .environment(\.colorScheme, .light) // << force light
    
    .frame(width: 300, height: 300)
    .background(Color("testColor")) // << system appearance

【讨论】:

【参考方案2】:

如果您正在使用 UIKit,那么 UIColorresolvedColor(with traitCollection:) 方法是覆盖默认配色方案的方法。

如果你和我一样,不喜欢在你的 SwiftUI 代码中看到 UIColors,下面是一种更 SwiftUI 的方式来获得相同的效果,到目前为止对我来说效果很好:

extension View 
    @ViewBuilder
    func forceDarkVariant(_ forceDark: Bool) -> some View 
        if forceDark 
            self.environment(\.colorScheme, .dark)
         else 
            self
        
    

【讨论】:

以上是关于获取资产中声明的颜色的浅色或深色变体的主要内容,如果未能解决你的问题,请参考以下文章

TailwindCSS - 在“浅色”、“深色”或“系统设置”之间切换颜色主题

有没有办法判断 HTML 十六进制颜色是浅色还是深色

如何在 vuetify 的浅色主题中启用具有自定义颜色的深色模式?

iOS13之前如何访问UIImage深色外观

如何更改状态栏颜色

UIColor可以用深色和浅色两种颜色初始化吗?