为啥 UIBarButtonItem 图像总是模糊/模糊/像素化

Posted

技术标签:

【中文标题】为啥 UIBarButtonItem 图像总是模糊/模糊/像素化【英文标题】:Why is UIBarButtonItem image always fuzzy/blurry/pixelated为什么 UIBarButtonItem 图像总是模糊/模糊/像素化 【发布时间】:2014-09-15 17:37:19 【问题描述】:

这是我当前的代码:

var reply = UIBarButtonItem(image: UIImage(named: "reply"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("reply:"))
self.navigationItem.rightBarButtonItem = reply

右上角的按钮总是模糊的。这是 iPhone4s 设备的屏幕截图,因此与视网膜无关。

我尝试了从 30x30 到 512x512 的不同图像尺寸,并使用 customView 添加图像。这些方法都没有解决问题。

提前致谢。

【问题讨论】:

【参考方案1】:

我已经用这个方法解决了:

var replyBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
replyBtn.setImage(UIImage(named: "reply"), forState: UIControlState.Normal)
replyBtn.addTarget(self.navigationController, action: Selector("reply:"), forControlEvents:  UIControlEvents.TouchUpInside)
var item = UIBarButtonItem(customView: replyBtn)
self.navigationItem.rightBarButtonItem = item

它使用完全相同的图像显示一个非常清晰的按钮。

【讨论】:

如果不适用于 Swift 2 和 xCode 6.4 替换最后一行 //self.navigationItem.rightBarButtonItem = item 与 self.navigationController?.navigationBar.topItem?.rightBarButtonItem = item【参考方案2】:

根据 ios 人机界面指南,图标应为 22x22 看看这里的文档: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/BarIcons.html

【讨论】:

【参考方案3】:

试试这个:

func createBarButton(image: String, size: CGSize, offset: (x: CGFloat, y: CGFloat) = (0,0), hightlightable: Bool = true, action: Selector) -> UIBarButtonItem 
    let btn = UIButton(type: .custom)
    let img = UIImage(named: image)

    btn.setBackgroundImage(img, for: .normal)
    btn.addTarget(self, action: action, for: .touchUpInside)
    btn.frame = CGRect(x: offset.x, y: offset.y, width: size.width, height: size.height)
    btn.adjustsImageWhenHighlighted = hightlightable
    let view = UIView(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height))
//        view.bounds = view.bounds.offsetBy(dx: offset.x, dy: offset.y)
    view.addSubview(btn)
    let barButton = UIBarButtonItem(customView: view)

    return barButton


self.navigationItem.rightBarButtonItem = createBarButton(image: "YOUR_IMAGE",
     size: CGSize(width: 35, height: 35),
     offset: (x: -10, y: 0),
     action: #selector(showXY))

【讨论】:

以上是关于为啥 UIBarButtonItem 图像总是模糊/模糊/像素化的主要内容,如果未能解决你的问题,请参考以下文章

手机为啥截屏总是模糊的呢?

我的图像很模糊!为啥 WPF 的 SnapsToDevicePixels 不起作用?

试图将我的 UIImage 裁剪为 1:1 的纵横比(正方形),但它不断放大图像,导致图像模糊。为啥?

为啥我的 SVG 图像在设备 API 16 和 API 27 中看起来很模糊

我在我的 libgdx_project 中使用 FBO 渲染图像传递模糊着色器,fps 下降到 20。为啥?

请问哪位大神知道为啥Dreamweaver 新建HTML,插入图像的时候更改源文件地址,图片会变模糊?