如何使用 Swift 5 在 SwiftUI 中将颜色与 RGB 或十六进制值一起使用? [复制]

Posted

技术标签:

【中文标题】如何使用 Swift 5 在 SwiftUI 中将颜色与 RGB 或十六进制值一起使用? [复制]【英文标题】:How to use Color with RGB or hex value in SwiftUI using Swift 5? [duplicate] 【发布时间】:2020-09-30 17:51:30 【问题描述】:

我目前正在尝试更改 SwiftUI 中标签的背景颜色。据我所知,SwiftUI 以 View 作为背景 Modifier 的参数。

但是,我遇到了一个我无法解决的问题:

我想通过使用十六进制代码或 RGB 值来更改标签的背景颜色。由于某种原因,这样做时背景颜色总是变为白色。

这很好用:

Label(
    title:  Text("someTitle") ,
    icon:  Image(systemName: "someName") 
)
.background(Color.purple) // Using the provided standard Colors works perfectly fine.

但是,我想使用十六进制或 RGB 值创建背景颜色:

.background(Color(Color.RGBColorSpace.sRGB, red: 92, green: 225, blue: 230, opacity: 1))
// or
.background(Color(UIColor(red: 220, green: 24, blue: 311, alpha: 1)))

这不起作用,标签的背景颜色总是变回白色。如何实现这个目标?

【问题讨论】:

Color(UIColor(red: 220/255, green: 24/255, blue: 311/255, alpha: 1) 【参考方案1】:

UIColor init 方法UIColor(red:green:blue:alpha) 为每个值获取从 0 到 1 的浮点值。

任何 ≥ 1.0 的值都会“最大化”该颜色。所以像UIColor(red: 220, green: 24, blue: 311, alpha: 1) 这样的表达式会将所有3 个颜色通道 alpha 设置为1.0,从而产生白色。 UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

您可以为 UIColor 创建一个扩展,添加方便的初始化程序,这些初始化程序将采用不同类型的值。首先是初始化器,每个初始化器的值都在 0-255 之间。然后你可以创建另一个初始化器UIColor.init(hexString:String)

从 0 到 255 取值的那个会更容易编写。采用十六进制字符串的那个将涉及实现一个十六进制解析器。我敢打赌,已经有人写过了。

看看这段代码,例如:

https://gist.github.com/anonymous/fd07ecf47591c9f9ed1a

【讨论】:

这应该作为重复关闭。顺便说一句,我的评论是完美的时机。同一秒 注意:在为ios 10或更高版本链接的应用程序中,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被限制。当然对于这么高值它将使它总是返回白色

以上是关于如何使用 Swift 5 在 SwiftUI 中将颜色与 RGB 或十六进制值一起使用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中将 swift 应用程序上的所有 Text() 设置为相同的颜色

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?

如何使用 SwiftUI 按按钮移动到另一个视图 - swift 5.5

Helo 在 xcode 中的调试器上,使用 swift 和 swiftUI 5

如何在 Swift 中将可转换属性保存到 Core Data

SwiftUI:如何在 macOS 11 上使用 NSSearchToolBarItem?