You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UIViewRepresentable调用updateUIView后对应UIView未更新问题排查

问题原因

通过CICode128BarcodeGenerator生成的CIImage默认是刚好容纳条码的最小尺寸,高度仅几十像素,同时UIImageView未设置适配模式,图片无法正常拉伸适配你设定的视图大小,就会出现updateUIView触发但视图看不到变化的情况。

修复方案

需要修改两处代码:

  1. 给BarCodeView中的UIImageView设置适配模式,让条码可以等比例填充视图
struct BarCodeView: UIViewRepresentable {
    @Binding var barcode: String
    func makeUIView(context: Context) -> UIImageView {
        let imageView = UIImageView()
        // 新增适配模式配置
        imageView.contentMode = .scaleAspectFit
        return imageView
    }

    func updateUIView(_ uiView: UIImageView, context: Context) {
        uiView.image = UIImage(barcode: barcode)
    }
}
  1. 放大生成的条码原始尺寸,避免Retina屏幕上显示模糊
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
        }
        // 新增缩放逻辑,10倍放大可根据实际需求调整
        let scaledImage = ciImage.transformed(by: CGAffineTransform(scaleX: 10, y: 10))
        self.init(ciImage: scaledImage)
    }
}

修改完成后点击按钮即可看到条码正常更新。

内容的提问来源于stack exchange,提问作者koza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:27:03