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
相关产品推荐
相关产品推荐

