SwiftUI:带条形码的图像不显示
SwiftUI: Image with barcode doesn't show up
我正在尝试展示一个 UIImage 实例,它是从字符串生成的条形码:
if let image = UIImage(barcode: "1234567890") {
Image(uiImage: image)
}
但它显示 空矩形 ,尽管在调试中 image
填充了真实图像:
我使用一个简单的 UIImage 扩展从字符串生成带有条形码的 UIImage:
extension UIImage {
convenience init?(barcode: String) {
let data = barcode.data(using: .ascii)
guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else {
return nil
}
filter.setValue(data, forKey: "inputMessage")
guard let ciImage = filter.outputImage else {
return nil
}
self.init(ciImage: ciImage)
}
}
怎么了?有什么想法吗?
是的,看起来像 defect/incompatibility 图片。您可以向 Apple 提交反馈。
同时这里有一个解决方法。测试 Xcode 12 / iOS 14
struct TestBarCodeView: View {
var body: some View {
VStack {
BarCodeView(barcode: "1234567890")
.scaledToFit()
.padding().border(Color.red)
}
}
}
struct BarCodeView: UIViewRepresentable {
let barcode: String
func makeUIView(context: Context) -> UIImageView {
UIImageView()
}
func updateUIView(_ uiView: UIImageView, context: Context) {
uiView.image = UIImage(barcode: barcode)
}
}
我正在尝试展示一个 UIImage 实例,它是从字符串生成的条形码:
if let image = UIImage(barcode: "1234567890") {
Image(uiImage: image)
}
但它显示 空矩形 ,尽管在调试中 image
填充了真实图像:
我使用一个简单的 UIImage 扩展从字符串生成带有条形码的 UIImage:
extension UIImage {
convenience init?(barcode: String) {
let data = barcode.data(using: .ascii)
guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else {
return nil
}
filter.setValue(data, forKey: "inputMessage")
guard let ciImage = filter.outputImage else {
return nil
}
self.init(ciImage: ciImage)
}
}
怎么了?有什么想法吗?
是的,看起来像 defect/incompatibility 图片。您可以向 Apple 提交反馈。
同时这里有一个解决方法。测试 Xcode 12 / iOS 14
struct TestBarCodeView: View {
var body: some View {
VStack {
BarCodeView(barcode: "1234567890")
.scaledToFit()
.padding().border(Color.red)
}
}
}
struct BarCodeView: UIViewRepresentable {
let barcode: String
func makeUIView(context: Context) -> UIImageView {
UIImageView()
}
func updateUIView(_ uiView: UIImageView, context: Context) {
uiView.image = UIImage(barcode: barcode)
}
}