You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中Picker内颜色样本显示为灰色的问题求助

解决SwiftUI Picker中颜色样本显示灰色的问题

问题原因

SwiftUI原生的Color初始化器对Web颜色名称的支持范围有限,像BurlyWood、LightSteelBlue这类CSS颜色名不在默认支持列表中,无法被正确解析,最终显示为灰色。

解决思路

借助UIKit(iOS/iPadOS)或AppKit(macOS)的颜色支持——它们对Web颜色名称的兼容性更全面,再将其转换为SwiftUI的Color类型。

具体实现

修改Picker中的颜色设置代码,替换为基于UIColor/NSColor的初始化方式:

Picker("Font color", selection: $thePreferences.currentPrefs.libCompViewerBodyColor){
    ForEach(currentSkin.availableWebCompatibleColors, id: \.self){ colorName in
        HStack {
            Image(systemName:"square.fill")
                // 用UIColor解析Web颜色名,再转为SwiftUI Color
                .foregroundColor(Color(UIColor(named: colorName) ?? .gray))
            Text(colorName)
        }
    }
}

额外优化

你的颜色数组里存在重复的Red值,建议去重避免Picker出现重复选项:

@Published var availableWebCompatibleColors = Array(Set(["Aqua","Blue","MediumBlue","DarkBlue","BurlyWood","LightSteelBlue","Cyan","Green","Lime","Red","Maroon","Salmon","Yellow","LightYellow","Gold","Gray","LightGray","LightSlateGray","Linen","Purple","White","Black"])).sorted()

内容的提问来源于stack exchange,提问作者Ben Long

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:39:59