Il y a des moments où vous souhaitez mettre votre image d'origine dans la barre de navigation et la rendre un peu plus riche, non? À ce moment-là, si vous essayez de le faire de la manière habituelle, il sera affiché en bleu uni.
·idéal
·réalité
Je voudrais garder un mémorandum de ce que je peux faire pour éviter cela.
Essayez d'abord comme d'habitude. Est-ce comme ça quand il est écrit dans le code?
override func viewDidLoad() {
super.viewDidLoad()
setupNavigationBar()
}
private func setupNavigationBar() {
navigationItem.title = "Page d'accueil"
let button = UIButton(type: .system)
button.setImage(UIImage(named: "button_refresh"), for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
let rightItem = UIBarButtonItem(customView: button)
navigationItem.rightBarButtonItem = rightItem
}
@objc private func buttonAction() {
print("La couleur du bouton est étrange! !! !!")
}
En fait, il est plus rapide de l'ajouter dans Storyboard, mais comme il s'agit d'un groupe qui écrit en code, je le fais généralement (volonté d'Iron).
Si vous l'écrivez comme ça pour le moment, l'icône du bouton sera remplie de bleu, ce qui vous rend triste.
Lors de l'écriture de code, il est juste de réécrire l'endroit où setImage est défini sur bouton. Plus précisément, cela ressemble à ceci.
button.setImage(UIImage(named: "button_refresh")?.withRenderingMode(.alwaysOriginal), for: .normal)
UIImage a un mode de rendu,
automatic | Défaut. Il sélectionnera le mode lorsque vous utilisez l'image |
alwaysOriginal | Toujours afficher l'image d'origine |
alwaysTemplate | Cela dépend de la couleur de teinte du bouton, etc. |
Vous pouvez en spécifier trois. Cette fois, j'ai spécifié «toujours Original» parce que je veux que la barre de navigation affiche l'image d'origine. Au contraire, si vous voulez faire correspondre avec tintColor, vous pouvez spécifier ʻalwaysTemplate`.
Cependant, pour ceux d'entre vous qui trouvent compliqué d'écrire du code, il existe un moyen direct de le faire dans Assets.xcassets. Tout d'abord, ouvrez Assets.xcassets, sélectionnez l'image souhaitée, puis
Regardez le deuxième «Renser As» du haut des éléments de l'ensemble d'images sur la droite. Si rien n'est spécifié, il doit s'agir de «Default».
Vous connaissez déjà le reste. Si vous changez la valeur de Renser As
en ʻOriginal Image, il deviendra automatiquement ʻalways Original
sans utiliser with Rendering Mode
dans votre code.
C'est pourquoi c'était la méthode de réglage du mode de rendu de UIImage. Même s'il s'agit d'une fonction que vous utilisez de manière inattendue, vous ne pourrez peut-être pas vous en souvenir par accident (4 pertes), alors soyez prudent.