web-dev-qa-db-fra.com

Comment ne pas étirer une image dans UIButton

J'essaie de créer un UITableViewCell personnalisé par programme et l'une des sous-vues de cette cellule va être un bouton contenant une image (une simple image d'une loupe). Cependant, je veux que l'image du bouton soit centrée et réduite proportionnellement vers le bas pour tenir dans le bouton et NE PAS être étirée pour remplir tout le bouton. Ci-dessous est mon code où self fait référence à l'UITableViewCell personnalisé dans lequel je place le bouton.

self.myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.myButton setBackgroundImage:[UIImage imageNamed: @image_name_here"] forState:UIControlStateNormal];
self.myButton.frame = CGRectMake(...//something, something)
self.myButton.imageView.contentMode = UIViewContentModeCenter;
[self.contentView addSubview:self.mySearchHelpButton];

À l'heure actuelle, l'image s'étire pour remplir tout le bouton plutôt que d'être mise à l'échelle proportionnellement pour s'adapter parfaitement.

J'ai également essayé de définir le contentMode sur UIViewContentModeScaleAspectFill mais cela ne semble rien changer. En fait, aucun des différents contentModes ne semble changer quoi que ce soit.

53
Nosrettap

Avez-vous essayé setImage au lieu de setBackgroundImage?

65
Robot Woods

Assurez-vous que le bouton est un bouton UIB personnalisé

Utiliser simplement setImage: n'a pas fonctionné pour moi sur iOS9.

Mais cela a fonctionné combiné avec myButton.imageView.contentMode = UIViewContentMode.ScaleAspectFit;

47
Dimitris

Dans Swift ...

button.imageView?.contentMode = .aspectFit
37
Blank

Storyboard

Propriété image.

Vous devez définir une propriété spécifique dans Attributs d'exécution de Inspecteur d'identité - imageView.contentMode, où vous définissez la valeur par rapport à la position rawValue de l'énumération UIViewContentMode. 1 signifie scaleAspectFit .

Set button.imageView.contentMode in Storyboard

Et l'alignement du bouton, dans Inspecteur d'attributs :

Full alignment of button

27
dimpiax

Swift 4.2

myButton.imageView!.contentMode = .scaleAspectFit

Swift version antérieure

myButton.imageView!.contentMode = UIViewContentMode.scaleAspectFit
9
Abhishek Jain

Swift 4.X et 5.X

button.imageView!.contentMode = .scaleAspectFit
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
2
J. Doe

Je pense que vous manquez le problème évident. L'image est trop grande pour le bouton et iOS doit alors deviner comment vous voulez la mettre à l'échelle. Assurez-vous que vos images sont de la bonne taille et vous n'aurez pas ce problème. Bien sûr, cela concerne les images statiques et les boutons dont vous connaissez la taille à l'avance - pas le contenu dynamique.

0
Sherwin Zadeh