繁体   English   中英

SwiftUI:获取动态背景颜色(暗模式或亮模式)

[英]SwiftUI: Get the Dynamic Background Color (Dark Mode or Light Mode)

有没有办法系统地访问 SwiftUI 视图的标准动态背景颜色,而不管用户是处于明模式还是暗模式?

例如,我知道以下内容可用于获取主要(例如文本)颜色:

let textColor = Color.primary

...但我没有看到任何类似的获得背景颜色的东西。

let backgroundColor = Color.??? // Not available

我正在寻找适用于 iOS 和 macOS 的东西。

因此,目前似乎没有任何此类属性内置到 SwiftUI 的与操作系统无关的Color类中; 但是, UIColorNSColor确实为它提供了访问器(分别在 iOS 和 macOS 上),您可以使用这些较旧的颜色对象来初始化 SwiftUI Color对象。

因此,您可以使用Color的简单扩展来实现您的需求,如下所示,它使用条件编译在任一操作系统上正常工作。

无需使用此方法检查colorSchemeuserInterfaceStyle :当用户在colorScheme模式之间切换时,操作系统将自动切换。

我还包括了 'secondary' 和 'tertiary' 颜色,它们在 macOS 上有点主观,但如果需要,您可以随时将它们更改为其他一些NSColor属性。

斯威夫特 v5.2:

import SwiftUI

public extension Color {

    #if os(macOS)
    static let background = Color(NSColor.windowBackgroundColor)
    static let secondaryBackground = Color(NSColor.underPageBackgroundColor)
    static let tertiaryBackground = Color(NSColor.controlBackgroundColor)
    #else
    static let background = Color(UIColor.systemBackground)
    static let secondaryBackground = Color(UIColor.secondarySystemBackground)
    static let tertiaryBackground = Color(UIColor.tertiarySystemBackground)
    #endif
}

然后,您只需像任何其他 SwiftUI Color一样从代码中的其他地方访问这些。 例如:

let backgroundColor = Color.background

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM