在SwiftUI中以编程方式检测暗模式以显示适当的图像

Zai*_*ain 3 ios swift swiftui ios-darkmode

在中Assets.xcassets,可以添加其他图像,这些图像将根据外观自动切换。这对于静态图像效果很好,但是我试图弄清楚如何对下载的图像执行此操作。

影像集

有没有办法设置Imageinit 的暗模式版本,或者SwiftUI中是否有一个函数可以让您检测当前外观是否为暗,以便可以提供其他图像URL?

RPa*_*l99 13

您可以@Environment(\.colorScheme) var colorScheme: ColorScheme在任何视图中使用以获取设备是处于暗模式(.dark)还是亮模式(.light)。使用该信息,您可以有条件地决定使用三元运算符轻松显示哪个图像。

例如,如果您有一个名为“ lightImage”的图像(用于亮模式)和一个“ darkImage”(用于暗模式):

@Environment(\.colorScheme) var colorScheme: ColorScheme

var body: some View {
    Button(action: {
        foo()
    }) {
        Image(colorScheme == .light ? "lightImage" : "darkImage")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 回答我自己:您可以将 `.id(self.colorScheme)` 添加到视图中。效果很好。 (4认同)
  • 这有效,但仅适用于应用程序/视图启动时设置的 colorScheme。如果用户在运行时更改配色方案,这种方法将破坏您的 UI。 (3认同)