使用 UIImage 创建时 SwiftUI 图像不会切换到深色模式

Jan*_*Jan 5 swiftui

我有一个简单的 SwiftUI 视图,我在Image其中使用UIImage. 问题是,当配色方案更改时,使用 UIImage 创建的图像不会切换到深色或浅色模式。仅当重新加载整个视图时它才能正常工作。如果我直接使用图像名称创建图像,它会按预期工作。

struct ContentView: View {
    var body: some View {
        HStack {
            VStack {
                Image("my-image")
                Text("Image")
            }

            VStack {
                Image(uiImage: UIImage(named: "my-image")!)
                Text("Image+uiImage")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

图像本身位于 xcasset 目录中

在此输入图像描述

结果是这样的(请注意,当外观改变时,右侧图像不会改变,但仅在重新启动应用程序后才改变)

在此输入图像描述

Fre*_*orf 5

当使用 SwiftUIImage初始化时会发生这种情况UIImage(似乎是静态初始化,无需进一步观察原始UIImage)。

解决方法:使用环境变量时,可以通知视图手动重绘colorScheme。即使它在您以后的代码中似乎未使用。

如果您需要从共享的 UIKit/SwiftUI 代码库使用 UIImages,这非常有用。

在你的例子中:

struct ContentView: View {

    // This is required for the automatic re-creation of the view
    // (and thus updating the Image with the appropriate appearance
    // for the UIImage)
    @Environment(\.colorScheme) private var colorScheme // <- view get's notified

    var body: some View {
        HStack {
            VStack {
                Image("my-image")
                Text("Image")
            }

            VStack {
                Image(uiImage: UIImage(named: "my-image")!)
                Text("Image+uiImage")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会导致不必要的重绘,因此请首先尝试使用 SwiftUI Images,正如 @Jan 所说。


Jan*_*Jan 2

这里的解决方法是使用 Image 而不使用 UIImage 构造函数