UINavigationBarButtonItem加载PDF图片不显示文字 需改用SVG格式吗
问题根因
UIBarButtonItem使用图片时,系统默认会将图片调整为模板渲染模式,该模式下会忽略图片自身所有颜色信息,所有非透明像素都会统一渲染为你设置的tintColor(你这里配置的是.systemRed)。如果你的PDF素材内的文字是其他颜色(比如常见的白色文字),会被直接覆盖为红色,和主图案同色就无法正常区分显示,这是最核心的诱因,和你用PDF格式本身没有直接关系。
你自定义的scaleTo缩放方法如果存在逻辑缺陷,比如裁剪区域偏移、插值质量过低,也可能导致文字被裁切或模糊。
解决方案
- 优先修改图片渲染模式,不需要更换SVG格式:加载图片时指定使用原始渲染模式,保留素材本身的颜色即可,修改后的代码如下:
let liveIcon = UIImage(named: "LiveIcon")?.withRenderingMode(.alwaysOriginal).scaleTo(CGSize(width: 30, height: 20)) liveStreamButtonItem = UIBarButtonItem(image: liveIcon, style: .plain, target: self, action: #selector(self.liveStreamTapped)) liveStreamButtonItem.tintColor = .systemRed liveStreamButtonItem.isEnabled = false navigationItem.rightBarButtonItems = [searchBarButtonItem, liveStreamButtonItem]
- 检查
scaleTo方法的实现,确认缩放时没有裁切到素材的文字区域,缩放插值质量设置为适合文字显示的级别。 - 如果你要更换为SVG格式也可以,iOS 12+及Xcode 12+已原生支持SVG矢量素材,使用逻辑和PDF一致,依然需要注意渲染模式的配置,否则还是会出现同样的文字显示异常问题。
内容的提问来源于stack exchange,提问作者Noah Iarrobino
相关产品推荐
相关产品推荐

