Je souhaite afficher une image dans la partie gauche de ma barre de navigation dans Swift.
J'ai essayé d'ajouter un élément de bouton de barre de navigation et d'y définir une image.
Le problème est que je dois utiliser une très petite image pour qu'elle tienne bien dans la barre de navigation. Mais faire une si petite image conduit à une pixellisation, en particulier sur les plus gros téléphones iPhone 6 et 6 Plus.
Existe-t-il un moyen d'utiliser une image de bonne qualité, puis de définir le cadre pour qu'il tienne dans les limites de 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 placer le cadre sur l'image d'abord, puis sur l'élément du bouton de la barre. Mais cela génère une erreur:
Le type d'expression est ambigu sans plus de contexte.
Essaye ça
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
Voici 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]
Swift 4 et 5:
let imageView = UIImageView(image: UIImage(named: "Harp"))
let buttonItem = UIBarButtonItem(customView: imageView)
self.navigationItem.leftBarButtonItem = buttonItem
Il existe un moyen d'utiliser des images de différentes tailles, selon l'appareil. Cela s'appelle un catalogue d'actifs. Vous en aurez probablement déjà un dans votre projet, ou sinon, vous pouvez en ajouter un avec File > New > File > Resource > Asset Catalogue
.
Dans votre catalogue d'actifs, vous pouvez avoir plusieurs "ensembles d'images" (ceux-ci seront affichés sur le côté gauche). Ajoutez un nouveau jeu d'images avec le "+" en bas. Pour chaque ensemble d'images, vous pouvez fournir des images différentes (par exemple de tailles différentes) pour chacun de @ 1x, @ 2x et @ 3x.
Ensuite, pour utiliser une de ces images dans le code, vous utilisez simplement UIImage(named: "name_of_image_set")
- ne notez aucune extension. L'image correcte sera chargée, selon l'appareil.
J'espère que cela t'aides!