image para el elemento del button de la barra de navigation swift

Quiero mostrar rápidamente una image en el lado izquierdo de mi barra de navigation.

He intentado agregar un elemento del button de barra de navigation y configurar una image allí.

El problema es que tengo que usar una image muy pequeña para que encaje bien en la barra de navigation. Pero hacer una image tan pequeña lleva a la pixelación, especialmente en el teléfono más grande iPhone 6 y 6 Plus.

¿Hay alguna forma de usar una image de buena calidad y luego configurar el marco para que se ajuste a los límites de la barra de navigation?

Mi bash:

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) 

Traté de poner el marco en la image primero y luego en el elemento del button de barra. Pero esto es arrojar un error:

El tipo de expresión es ambiguo sin más context.

Prueba esto

 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] 

Para 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: UIControlEvents.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 

Aquí hay acción

 func callMethod() { //do stuff here } 

Existe una forma de utilizar imágenes de diferentes tamaños, según el dispositivo. Se llama un catálogo de activos. Probablemente ya tenga uno en su proyecto, o si no, puede agregar uno con File > New > File > Resource > Asset Catalogue .

Dentro de su catálogo de activos, puede tener varios 'sets de imágenes' (estos se mostrarán en el lado izquierdo). Agregue un nuevo set de imágenes con el '+' en la parte inferior. Para cada set de imágenes, puede suministrar diferentes imágenes (por ejemplo, de diferentes tamaños) para cada uno de @ 1x, @ 2x y @ 3x.

Luego, para usar una de estas imágenes en el código, simplemente usa UIImage(named: "name_of_image_set") – nota ninguna extensión. La image correcta se cargará, según el dispositivo.

¡Espero que esto ayude!