Comment puis-je ajuster la taille de l'image de l'UIButton? Je mets l'image comme ceci:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
Cependant, cela remplit l'image jusqu'au bouton complet, comment réduire la taille de l'image?
ios
objective-c
xcode
uibutton
adit
la source
la source
Réponses:
Si je comprends bien ce que vous essayez de faire, vous devez jouer avec l'encart du bord de l'image des boutons. Quelque chose comme:
la source
La réponse de Tim est correcte, mais je voulais ajouter une autre suggestion, car dans mon cas, il y avait une solution plus simple.
Je cherchais à définir les
UIButton
encarts d'image parce que je ne savais pas que je pouvais définir le mode de contenu sur les boutonsUIImageView
, ce qui aurait évité le besoin d'utiliser UIEdgeInsets et des valeurs codées en dur. Accédez simplement à la vue d'image sous-jacente sur le bouton et définissez le mode de contenu:Voir UIButton n'écoute pas le paramètre de mode de contenu?
Swift 3
la source
button.backgroundImageView.contentMode
ne fonctionne pasSwift 3:
la source
contentVerticalAlignment/contentHorizontalAlignment
options m'ont permis de la mettre à l'échelle comme je l'espérais. Merci d'avoir posté ceci.contentHorizontalAlignment
et acontentVerticalAlignment
fait l'affaireVous pouvez également le faire à partir du générateur d'interface comme celui-ci.
Je pense que c'est utile.
la source
Si votre image est trop grande (et que vous ne pouvez / ne voulez pas simplement réduire l'image), une combinaison des deux premières réponses fonctionne très bien.
À moins que vous n'obteniez les encarts d'image parfaits, l'image sera biaisée sans changer le
contentMode
.la source
vous pouvez utiliser la
imageEdgeInsets
propriété Les marges d'encart ou de départ du rectangle autour de l'image du bouton.Une valeur positive rétrécit ou insère cette arête - en mouvement. Une valeur négative étend ou dépasse ce bord.
la source
Voici l'autre solution pour redimensionner imageView d'UIButton.
la source
Voici la version Swift:
la source
Swift 4
Vous devrez utiliser ces deux lignes de code, dans cet ordre spécifique. Tout ce dont vous avez besoin est de changer la valeur supérieure et inférieure des inserts de bord.
la source
EXC_BAD_ACCESS
erreur lors de l'appel depuisoverride func layoutSubviews()
.Avec l'aide de la réponse de Tim C , j'ai pu créer une extension sur l'
UIButton
utilisation de Swift qui vous permet de spécifier le cadre de l'image en utilisant la.setImage()
fonction avec unframe
paramètre supplémentaireEn utilisant cela, si vous vouliez définir le cadre d'un
UIButton
surCGRectMake(0, 0, 64, 64)
et définir l'image de celui-cimyImage
avec un cadre deCGRectMake(8, 8, 48, 48)
, vous pouvez utiliserla source
if let
au lieu de vérifier siframe
c'estnil
et ensuite forcer le déballage des millions de fois .Lorsque vous modifiez la taille de l'icône avec
UIEdgeInsetsMake(top, left, bottom, right)
, gardez à l'esprit les dimensions des boutons et la capacité de UIEdgeInsetsMake à travailler avec des valeurs négatives comme si elles étaient positives.Exemple: deux boutons de hauteur 100 et d'aspect 1: 1.
Les exemples 1 et 3 sont identiques puisque ABS (100 - (40 + 40)) = ABS (100 - (60 + 60))
la source
Swift 3
J'ai défini la largeur et la hauteur de myButton sur 40 et mon rembourrage de EdgeInsetsMake est de 15 tous les côtés. Je suggère d'ajouter une couleur d'arrière-plan à votre bouton pour voir le rembourrage réel.
la source
Une approche consiste à redimensionner l'UIImage dans le code comme suit. Remarque: ce code est uniquement mis à l'échelle en fonction de la hauteur, mais vous pouvez également facilement ajuster la fonction à l'échelle par largeur.
la source
Mis à jour pour Swift> 5
définir la taille:
définir les marges:
la source
Mis à jour pour Swift 3
la source
Je pense que la taille de votre image est également la même que celle du bouton, puis vous mettez l'image en arrière-plan du bouton comme:
vous avez la même taille d'image et de bouton.J'espère que vous comprenez mon point.
la source