Eu me deparei com um problema que parece ser um bug. Mas talvez eu esteja omitindo algo em relação ao iOS 18.
Descrição: Após clicar no botão, renderizo uma visualização como uma imagem e a armazeno como Dados para mais tarde:
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 foi definido no catálogo Assets. Isso funcionou bem em versões anteriores ao iOS/iPadOS 18.
Então, antes de clicar no botão, você verá isto:
clicando no botão, a visualização mostraria isto:
com a atualização, parece que as cores do catálogo de ativos não estão disponíveis e o resultado fica assim:
O retângulo com TESTE 2 não tem cor.
Alguma ideia?
Isso funciona como esperado no macOS, então é bem provável que seja um bug. Parece que resolver um
ColorResource
em umImageRenderer
está um pouco quebrado no iOS 18.Color.init(_:bundle:)
também parece ter o mesmo problema.Uma solução alternativa é converter de um
UIColor
, porque aparentementeUIColor.init(named:)
não está quebrado. Supondo que você tenha gerado extensões paraUIColor
, você pode escrever