如何在macOS AppKit中手动获取特定系统外观的NSColor?
在macOS AppKit中提取动态NSColor的特定外观值
要从资源中创建的动态NSColor(适配深浅模式)里手动获取指定外观下的具体颜色值,可通过NSColor的resolvedColor(for:)方法结合NSAppearance实现,对应UIKit的解决方案,适配macOS API的写法如下:
extension NSColor { /// 获取浅色模式下的颜色值 var lightModeVariant: NSColor { resolvedColor(for: NSAppearance(named: .aqua)!) } /// 获取深色模式下的颜色值 var darkModeVariant: NSColor { resolvedColor(for: NSAppearance(named: .darkAqua)!) } }
用法示例
从资源目录获取动态颜色后,直接调用扩展属性即可:
guard let dynamicColor = NSColor(named: "Color") else { return } // 强制获取深色模式配色(不受当前系统外观影响) let darkModeColor = dynamicColor.darkModeVariant // 强制获取浅色模式配色(不受当前系统外观影响) let lightModeColor = dynamicColor.lightModeVariant
关键说明
- AppKit通过
NSAppearance管理外观上下文,.aqua对应标准浅色外观,.darkAqua对应标准深色外观。 - 若你的颜色集适配了其他特殊外观(如高对比度模式),可传入对应的
NSAppearance命名(例如.accessibilityHighContrastAqua)来获取对应配色。
内容的提问来源于stack exchange,提问作者Yiming Designer
相关产品推荐
相关产品推荐

