如何解决UIButton中128×128像素Logo显示模糊的问题
嘿,我看你遇到了UIButton里Logo显示模糊的问题,结合你给出的代码和图片情况,这里有几个实用的解决办法:
准备多分辨率适配图
iOS设备有不同的屏幕像素密度,128×128只是1x分辨率的尺寸,你需要同时准备对应2x(256×256)和3x(384×384)版本的图片,按照navigation@2x.png、navigation@3x.png的命名规范命名后,放入项目的Assets.xcassets中。系统会根据当前设备自动匹配最合适的分辨率图片,从根源上避免因拉伸压缩导致的模糊。调整图片渲染与抗锯齿处理
你代码里用的.withRenderingMode(.automatic)可以试试换成.alwaysOriginal,同时给图片加上抗锯齿处理,修改后的代码如下:let createButton = UIButton(type: .system) // 更可控的图片加载方式 guard let navImage = UIImage(named: "navigation.png") else { return } // 设置渲染模式并添加抗锯齿 let displayImage = navImage.withRenderingMode(.alwaysOriginal) UIGraphicsBeginImageContextWithOptions(displayImage.size, false, UIScreen.main.scale) displayImage.draw(in: CGRect(origin: .zero, size: displayImage.size)) let antiAliasedImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() // 给按钮设置处理后的图片 createButton.setImage(antiAliasedImage, for: .normal) createButton.tintColor = UIColor.red createButton.frame = CGRect(x: 0, y: 0, width: 34, height: 34) createButton.contentMode = .scaleAspectFit createButton.backgroundColor = UIColor.clear navigationItem.leftBarButtonItem = UIBarButtonItem(customView: createButton)优化BarButtonItem的适配
UIBarButtonItem有默认的点击区域要求,直接用customView可能会让图片被强制缩放。可以给按钮添加内边距,避免图片被挤压:createButton.contentEdgeInsets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4)替换imageLiteral加载方式
#imageLiteral虽然便捷,但编译时可能会对图片做额外处理,建议改用UIImage(named:)的方式加载图片,对图片的控制会更灵活。
内容的提问来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

