48 votes

UIImageView ne teinte pas toujours l'image du modèle

Dans le cas ci-dessous, il y a deux UIImageViews avec les mêmes paramètres et le même modèle de l'image... Mais l'une des teintes de l'image, et l'on n'a pas

J'ai dupliqué de travail UIImageView et l'a placé à la place de l'autre et cela a fonctionné. Cela m'est arrivé plusieurs fois et cette solution a toujours travaillé, mais je me demande encore ce que je pu faire de mal? Peut-il être un Xcode bug? Fait quelque chose de similaire il vous arriver? J'ai Xcode 8.1.

Xcode screenshot

Xcode screenshot

123voto

David Rees Points 2190

Facile solution:

enter image description here

Il suffit d'ajouter une nouvelle exécution de l'attribut qui va définir la nuance de couleur de la UIImageView à la couleur spécifiée et s'assurer que l'image est teintée.

Vous aurez toujours besoin de définir votre image soit rendue comme un modèle de l'image dans vos Images.xcassets fichier.

De cette façon, vous n'avez pas besoin de toutes les autres prises, extensions ou les lignes de code.

Aussi, prenez note: Il n'appliquera pas la nuance de couleur dans l'attribut défini par l'utilisateur si la nuance de couleur sur le point de vue est de la même couleur, ils doivent être différents.

51voto

allaire Points 3044

La meilleure solution que j'ai trouvée ne nécessite pas de sous-classe ou un autre attribut IBInspectable :

 import UIKit

extension UIImageView {
    override open func awakeFromNib() {
        super.awakeFromNib()
        tintColorDidChange()
    }
}
 

24voto

richardjsimkins Points 353

Le problème vient de la valeur de la teinte ayant pas de nulle état (à l'intérieur de la table de montage séquentiel/Interface Builder INTERFACE utilisateur). Pour Xcode pour décider si une teinte doit être appliqué à une UIImageView il semble y avoir un test supplémentaire. Dans Xcode, c'est apparemment fait en évaluant les contraintes appliquées à l' UIImageView. Autant que je sache, ce test est sans-papiers.

Si vous avez seulement un "Espacement pour voisin le plus proche" de la contrainte sur deux (ou un) sur les côtés de votre UIImageView puis la teinte n'est pas appliquée indépendamment de la valeur définie pour l' UIImage.renderingMode.

Si vous avez un "Espacement pour voisin le plus proche" de la contrainte sur trois (ou tous) les côtés de votre UIImageView puis la teinte est appliquée si l' UIImage.renderingMode est définie à l' .alwaysTemplate.

Dans un but purement table de montage séquentiel/Interface Builder approche vous définissez l' UIImage.renderingMode d'une image en l'ajoutant à un Actif Catalogue et la modification de l' "Rendre en tant Que" propriété de l'Image de "Modèle de l'Image".

18voto

Essayez de définir tintColor programme; cela a résolu le problème pour moi.

15voto

paddlefish Points 311

Je pense qu'il y a un bug dans UIImageView. Si vous définissez une couleur de teinte dans le story-board, cette teinte ne sera pas appliquée, même lorsque l'actif est configuré pour le rendu en tant que modèle.

La solution de contournement consiste à appliquer la couleur de teinte à la vue parent de UIImageView dans le storyboard.

Vous pouvez également définir la teinteColoration sur nil, puis à nouveau dans le code en liant UIImageView à une prise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X