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.
Avez-vous essayé setImage
au lieu de setBackgroundImage
?
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;
Dans Swift ...
button.imageView?.contentMode = .aspectFit
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 .
Et l'alignement du bouton, dans Inspecteur d'attributs :
Swift 4.2
myButton.imageView!.contentMode = .scaleAspectFit
Swift version antérieure
myButton.imageView!.contentMode = UIViewContentMode.scaleAspectFit
Swift 4.X et 5.X
button.imageView!.contentMode = .scaleAspectFit
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
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.