为啥 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 中看起来很模糊