图像的导航栏button项目迅速

我想以快捷方式在导航栏的左侧显示图像。

我曾尝试添加导航栏button项目,并在那里设置图像。

问题是,我必须使用一个非常小的图像,以适应在导航栏很好。 但是制作这么小的图像会导致像素化,特别是在更大的手机iPhone 6和6 Plus上。

有没有办法使用高质量的图像,然后将框架设置为适合导航栏的边界?

我的尝试:

var image = UIImage(named: "Harp.png") image = image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: nil, action: nil) self.navigationItem.leftBarButtonItem.frame = CGRectMake(0, 0, 53, 31) //image.frame = CGRectMake(0, 0, 53, 31) 

我试图把框架放在图像上,然后在酒吧button项目。 但是这是抛出一个错误:

expression的types是不明确的,没有更多的上下文。

尝试这个

 let button = UIButton(type: UIButtonType.Custom) button.setImage(UIImage(named: "yourImageName.png"), forState: UIControlState.Normal) button.addTarget(self, action:Selector("callMethod"), forControlEvents: UIControlEvents.TouchDragInside) button.frame=CGRectMake(0, 0, 30, 30) let barButton = UIBarButtonItem(customView: button) self.navigationItem.leftBarButtonItems = [newBackButton,barButton] 

对于Swift 3

 let button = UIButton.init(type: .custom) button.setImage(UIImage.init(named: "yourImageName.png"), for: UIControlState.normal) button.addTarget(self, action:#selector(ViewController.callMethod), for:.touchUpInside) button.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30) //CGRectMake(0, 0, 30, 30) let barButton = UIBarButtonItem.init(customView: button) self.navigationItem.leftBarButtonItem = barButton 

这是行动

 func callMethod() { //do stuff here } 

有一种方法可以使用不同大小的图像,具体取决于设备。 这就是所谓的资产目录。 您的项目中可能已经有一个,如果没有,您可以添加一个File > New > File > Resource > Asset Catalogue

在您的资产目录中,您可以有多个“图像集”(这些将显示在左侧)。 使用底部的“+”添加一个新的图像集。 对于每个图像集,您可以为@ 1x,@ 2x和@ 3x中的每一个提供不同的图像(例如不同大小)。

然后,要在代码中使用这些图像中的一个,只需使用UIImage(named: "name_of_image_set") – 请注意没有扩展名。 正确的图像将被加载,具体取决于设备。

希望这可以帮助!