Mate Hegedus
Mate Hegedus

Reputation: 2905

Why is UIBarButtonItem image always fuzzy/blurry/pixelated

Here is my current code:

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

imgThe button in the top right corner is always fuzzy. This is a screenshot from an iPhone4s device so it is not a retina-related issue.

I have tried different image sizes ranging from 30x30 to 512x512 and adding the image using customView. These methods have not fixed the issue.

Thanks in advance.

Upvotes: 3

Views: 5815

Answers (3)

SwiftiSwift
SwiftiSwift

Reputation: 8687

Try this:

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))

Upvotes: 0

Mate Hegedus
Mate Hegedus

Reputation: 2905

I have solved it using this method:

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

It displays a very crisp button using the exact same image.

Upvotes: 10

LS_
LS_

Reputation: 7129

From IOS human interface guide the icon should be 22x22 Take a look at the documentation here: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/BarIcons.html

Upvotes: 3

Related Questions