SwiftUI ImageRenderer 无法使用资产目录中的颜色

问题描述 投票:0回答:1

我遇到了一个似乎是错误的问题。但也许我遗漏了一些关于 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 之前的版本上运行良好。

因此,在单击按钮之前,人们会看到以下内容: enter image description here

单击按钮,视图将显示以下内容: enter image description here

升级后,资产目录中的颜色似乎不可用,结果如下所示: enter image description here

测试 2 的矩形没有颜色。

有什么想法吗?

image swiftui
1个回答
0
投票

这很可能是一个错误。似乎在 iOS 18 上解决

ColorResource
中的
ImageRenderer
有点问题。
Color.init(_:bundle:)
似乎也有同样的问题。

解决方法是从

UIColor
进行转换,因为显然
UIColor.init(named:)
并未损坏。假设您已经生成了
UIColor
的扩展,您可以编写

.fill(Color(uiColor: .test))
© www.soinside.com 2019 - 2024. All rights reserved.