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.
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
}
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]
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!