我有一个简单的 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 目录中
结果是这样的(请注意,当外观改变时,右侧图像不会改变,但仅在重新启动应用程序后才改变)
当使用 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 所说。
| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |