获取资产中声明的颜色的浅色或深色变体
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,那么 UIColor
的 resolvedColor(with traitCollection:)
方法是覆盖默认配色方案的方法。
如果你和我一样,不喜欢在你的 SwiftUI 代码中看到 UIColors,下面是一种更 SwiftUI 的方式来获得相同的效果,到目前为止对我来说效果很好:
extension View
@ViewBuilder
func forceDarkVariant(_ forceDark: Bool) -> some View
if forceDark
self.environment(\.colorScheme, .dark)
else
self
【讨论】:
以上是关于获取资产中声明的颜色的浅色或深色变体的主要内容,如果未能解决你的问题,请参考以下文章
TailwindCSS - 在“浅色”、“深色”或“系统设置”之间切换颜色主题