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

如何解决UIButton中128×128像素Logo显示模糊的问题

解决UIButton中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:46:29