首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SwiftUI中打开暗模式时更改背景色

在SwiftUI中打开暗模式时更改背景色
EN

Stack Overflow用户
提问于 2020-01-11 12:56:20
回答 13查看 44.1K关注 0票数 49

我在SwiftUI中创建了一个带有背景颜色的白色.background(Color.white)的自定义工作表

现在,我希望当用户打开iOS上的黑暗模式时,背景色变为黑色。但我找不到一个动态的颜色为背景,如Color.primary的颜色,文字等。

那么,当黑暗模式打开时,有没有办法将背景颜色更改为黑色呢?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2020-02-06 16:47:44

为了详细说明这两个现有的答案,有几种方法可以根据您想要实现的目标来根据光或暗模式(又名colorScheme)进行背景更改。

如果您将背景颜色设置为白色,因为这是默认的背景色,并且您希望系统能够在用户切换到黑暗模式时更新它,请将.background(Color.white)更改为.background(Color(UIColor.systemBackground)) (umayanga的答案)。

例如:

代码语言:javascript
运行
复制
// Use default background color based on light/dark mode

struct ContentView: View {
...
var body: some View {

    // ... to any view
    .background(Color(UIColor.systemBackground))

}

如果要根据处于光或暗模式的设备自定义视图的颜色,可以这样做(根据Asperi的回答):

代码语言:javascript
运行
复制
// Use custom background color based on light/dark mode

struct ContentView: View {
@Environment(\.colorScheme) var colorScheme

...
var body: some View {

    // ... to any view
    .background(colorScheme == .dark ? Color.black : Color.white)

}

请注意,许多SwiftUI视图默认将其背景色设置为.systemBackground,因此,如果您使用的是ScrollView、List、Form等,则它们将使用默认的系统背景色,除非您想要自定义,否则不需要使用.background

票数 96
EN

Stack Overflow用户

发布于 2020-06-05 02:50:02

如果您想要直接从Color中工作的东西(就像您在Color.primary中所做的那样),以及iOS和macOS上的函数(UIColor不会在macOS上工作),您可以使用以下简单的Color扩展,它使用条件编译来正确地在任何一个操作系统上工作。

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

代码语言:javascript
运行
复制
let backgroundColor = Color.background

不需要用这种方法检查colorSchemeuserInterfaceStyle:当用户在光明与黑暗模式之间移动时,操作系统将自动切换。

我还包括了“次要”和“三级”颜色,这些颜色在macOS上有些主观,但是如果您愿意,可以随时将它们更改为其他一些NSColor属性。

Swift v5.2:

代码语言:javascript
运行
复制
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
}
票数 24
EN

Stack Overflow用户

发布于 2020-01-11 13:06:23

.background(Color.white)更改为.background(Color(UIColor.systemBackground))

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59694589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档