我遇到了一个似乎是错误的问题。但也许我遗漏了一些关于 iOS 18 的内容。
说明: 单击按钮后,我将一些视图渲染为图像并将其存储为数据以供以后使用:
struct ContentView: View {
@State private var data:Data?
private var img:Image {
if let data {
return Image(uiImage: UIImage(data: data) ?? UIImage())
}else{
return Image(systemName: "xmark.circle.fill")
}
}
var body: some View {
VStack {
TestView()
Button("Test") {
let ren=ImageRenderer(content: TestView())
if let data=ren.uiImage?.pngData() {
self.data=data
}
}
img
.resizable()
}
}
}
struct TestView:View {
var body: some View {
VStack {
ZStack {
Rectangle()
.fill(Color.red)
Text("TEST")
}
ZStack {
Rectangle()
.fill(Color.test)
Text("TEST 2")
}
}
}
}
Color.test 在 Assets 目录中定义。 这在 iOS/iPadOS 18 之前的版本上运行良好。
测试 2 的矩形没有颜色。
有什么想法吗?
这很可能是一个错误。似乎在 iOS 18 上解决
ColorResource
中的 ImageRenderer
有点问题。Color.init(_:bundle:)
似乎也有同样的问题。
解决方法是从
UIColor
进行转换,因为显然 UIColor.init(named:)
并未损坏。假设您已经生成了 UIColor
的扩展,您可以编写
.fill(Color(uiColor: .test))