我遇到了一个问题,似乎是个 bug。但也许我忽略了 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 的矩形没有颜色。
有什么想法吗?
这在 macOS 上按预期工作,所以这很可能是一个错误。在 iOS 18 上,解析
ColorResource
an 中的a 似乎ImageRenderer
有点问题。Color.init(_:bundle:)
似乎也有同样的问题。一种解决方法是从 转换
UIColor
,因为显然UIColor.init(named:)
没有损坏。假设您已经为 生成了扩展UIColor
,您可以编写