如何在macOS中获取系统选中颜色?
如何获取SwiftUI中系统默认的列表选中颜色?
问题说明
我需要获取系统默认的、用于列表行选中状态或图标显示的选中颜色。尝试过.accentColor(Color.primary)、.background(Color.secondary)等写法,但SwiftUI的Colors API仅提供.gray、.blue这类具体颜色,以及.primary、.secondary属性——但这两个属性实际返回的都是蓝色,和系统默认选中色不匹配。我自己实现了以下代码,但颜色匹配度并不理想:
List{}.listRowBackground(selected?.wrappedValue == listItem ? .accentColor.opacity(0.85) : Color.clear)
完美匹配的解决方案
要精准获取系统默认的列表选中背景色,直接使用UIKit提供的系统颜色即可,在SwiftUI中通过Color包装器调用:
List{}.listRowBackground(selected?.wrappedValue == listItem ? Color(UIColor.systemSelectedBackground) : Color.clear)
UIColor.systemSelectedBackground是iOS 13及以上系统提供的标准选中背景色,能完全匹配系统原生列表行的选中效果,无需手动调整透明度或颜色值。
如果需要适配iOS 12及更低版本,可以回退使用近似的系统灰度色:
extension Color { static let systemSelectedBackground: Color = { if #available(iOS 13.0, *) { return Color(UIColor.systemSelectedBackground) } else { return Color(UIColor.systemGray5) } }() }
之后直接调用自定义扩展的颜色即可:
List{}.listRowBackground(selected?.wrappedValue == listItem ? .systemSelectedBackground : Color.clear)
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

