image pour le bouton de la barre de navigation élément swift

je veux afficher une image dans la partie gauche de ma barre de navigation rapide.

j'ai essayé d'ajouter un élément de barre de navigation et de mettre une image là.

le problème est que je dois utiliser une image vraiment petite pour qu'elle rentre bien dans la barre de navigation. Mais faire une si petite image conduit à la pixelisation surtout sur le plus grand iPhone 6 et 6 Plus.

Est-il possible d'utiliser une image de bonne qualité et ensuite définir le cadre pour tenir dans les limites de la la barre de navigation?

Ma tentative:

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)

j'ai essayé de mettre le cadre sur l'image d'abord, puis sur le bouton Barre. Mais c'est en jetant un message d'erreur:

le Type d'expression est ambigu sans plus de contexte.

17
demandé sur user2363025 2015-07-17 13:08:06

3 réponses

Essayez Ceci

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]

Pour 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

Ici, c'est l'action

func callMethod() {
//do stuff here
}
42
répondu Avijit Nagare 2017-10-25 10:53:50

Utilisez ce code:

self.navigationItem.leftBarButtonItem = nil

let button = UIButton(type: .custom)
button.setImage(UIImage (named: "ChatTab"), for: .normal)
button.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0)
//button.addTarget(target, action: nil, for: .touchUpInside)
let barButtonItem = UIBarButtonItem(customView: button)

let button2 = UIButton(type: .custom)
button2.setImage(UIImage (named: "ActivityTab"), for: .normal)
button2.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0)
//button.addTarget(target, action: nil, for: .touchUpInside)

let barButtonItem2 = UIBarButtonItem(customView: button2)
self.navigationItem.rightBarButtonItems = [barButtonItem, barButtonItem2]

Sortie: enter image description here

3
répondu Mr.Javed Multani 2018-02-07 07:58:11

Il existe un moyen d'utiliser des images de différentes tailles, en fonction de l'appareil. Ça s'appelle un catalogue de biens. Vous aurez probablement déjà un dans votre projet, ou si non, vous pouvez ajouter un File > New > File > Resource > Asset Catalogue.

dans votre catalogue D'actifs, vous pouvez avoir plusieurs 'jeux D'images' (ceux-ci seront affichés sur le côté gauche). Ajouter une nouvelle Image avec le " + " en bas. Pour chaque jeu D'images, vous pouvez fournir des images différentes (par exemple de différentes tailles) pour chacun des @1x, @2x, et @3x.

alors, pour utiliser une de ces images en code, vous utilisez simplement UIImage(named: "name_of_image_set") - noter Aucune extension. La bonne image sera chargée, en fonction de l'appareil.

Espérons que cette aide!

1
répondu JoeFryer 2015-07-17 10:48:44