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

Are*_*rek 3 uikit ios swift swiftui

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

Asp*_*eri 6

在 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
}
Run Code Online (Sandbox Code Playgroud)


Şaf*_*zer 6

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

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

extension View {
    @ViewBuilder
    func forceDarkVariant(_ forceDark: Bool) -> some View {
        if forceDark {
            self.environment(\.colorScheme, .dark)
        } else {
            self
        }
    }
}
Run Code Online (Sandbox Code Playgroud)