firstButton est un UIButton de type Custom. J'en mets trois par programmation dans chaque cellule d'un tableau, ainsi:
[firstButton setImage:markImage forState:UIControlStateNormal];
[firstButton setContentMode:UIViewContentModeScaleAspectFit];
[cell.contentView addSubview:firstButton];
Ailleurs, je lui dis de clipToBounds. Ce que j'obtiens, c'est un recadrage du carré central de l'image, plutôt qu'un rendu à l'échelle de son aspect. J'ai essayé de nombreuses façons, notamment en définissant la propriété mode sur firstButton.imageView, qui ne semble pas non plus fonctionner.
ios
uibutton
contentmode
Dan Ray
la source
la source
Réponses:
J'ai eu le même problème. Je vois que cette question est un peu ancienne, mais je veux fournir une réponse claire et correcte pour sauver d'autres personnes (comme moi) un certain temps lorsqu'elle apparaîtra dans leurs résultats de recherche.
Cela m'a pris un peu de recherche et d'expérimentation, mais j'ai trouvé la solution. Définissez simplement le ContentMode de l'ImageView "caché" qui se trouve à l'intérieur de l'UIButton.
C'est peut-être à cela que Dan Ray faisait allusion dans sa réponse acceptée, mais je suppose que non.
la source
Si vous avez affaire à l'image de l'UIButton (par opposition à son backgroundImage), définir le contentMode sur l'UIButton lui-même ou sur son imageView n'a aucun effet (malgré ce que disent les autres réponses).
Sinon, faites ceci à la place:
Ou dimensionner votre image en conséquence.
OU utilisez simplement un UIImageView (qui respecte correctement contentMode) avec un UITapGestureRecognizer attaché, ou un UIButton transparent au-dessus.
la source
contentMode
sur leimageView
si vous voulez faire une sorte d'aspect remplissage ou en forme, que d' autres réponses ont permis de clarifier. Consultez: stackoverflow.com/a/7944316/746890 .Plutôt que de fixer le
contentMode
sur le bouton lui - même, vous voulez définircontentHorizontalAlignment
etcontentVerticalAlignment
propriétés et (cruciale) lecontentMode
pour le bouton deimageView
pour tout type d'aspect remplissage ou en forme. Voici un exemple:Bien sûr, vous pouvez également faire d'autres choses comme aligner l'image du bouton en haut du bouton. Si vous n'avez pas besoin d'un remplissage ou d'un ajustement d'aspect, vous pouvez simplement définir l'alignement par lui-même:
Dans Swift, vous voudrez utiliser:
Cela fonctionne pour toutes les versions d'iOS, y compris les dernières versions avec mise en page automatique (c'est-à-dire iOS 4 jusqu'à iOS 11+).
la source
Après quelques heures de confusion, voici comment je l'ai fait fonctionner sous iOS 3.2. Comme Dusker l'a mentionné, utiliser setBackgroundImage au lieu de setImage a fait le travail pour moi.
la source
La réponse est d'utiliser une UIImageView avec tous les jolis paramètres du mode de contenu que vous souhaitez, puis de superposer un bouton personnalisé au-dessus. C'est stupide que vous ne pouvez pas faire tout cela d'un seul coup, mais il semble que vous ne puissiez pas.
la source
J'ai trouvé un correctif pour cela. Définissez la
adjustsImageWhenHighlighted
propriété deUIButton
surNO
.J'espère que cela t'aides. N'hésitez pas à commenter ci-dessous, je ferai le suivi de toutes vos questions.
la source
Ma réponse est similaire à celle de Kuba. J'avais besoin que mon image soit définie par programme.
la source
Seule solution qui a fonctionné pour moi:
la source
Swift 3
la source
Au lieu de setImage, essayez setBackgroundImage
la source
Je crois que nous avons ici un problème de création d'interface simple - apparemment, l'IB ignore tout changement de mode de contenu APRÈS que vous ayez défini la propriété image.
la solution est aussi simple: définissez le mode de contenu, supprimez les noms d'image précédemment définis (assurez-vous de le supprimer dans tous les états, par défaut, en surbrillance, etc.), puis entrez à nouveau les noms d'image souhaités dans tous les états souhaités - et voilà .
la source
Je conseille également de jeter un œil à la
adjustsImageWhenHighlighted
UIButton
propriété pour éviter d'étranges déformations de l'image, lorsque le bouton est enfoncé.la source
En essayant de comprendre cela, ma méthode est devenue un peu plus pirate avec le temps, et j'ai fini par sous-classer UIButton et surcharger setHighlighted:
Pour moi, cela fonctionne pour simplement abattre l'image alpha à 0,5, car elles sont sur un fond noir.
Cependant, cela ne fonctionne que si je commente [super setHighlighted:] (où il apparaît que le code extensible de l'image est en cours), ce qui ne semble tout simplement pas être la bonne façon de résoudre ce problème ... tout semble être fonctionne bien, cependant. Nous verrons comment cela résiste au fur et à mesure que je continue à travailler dessus.
la source
Si quelqu'un cherche une réponse qui fonctionne dans iOS 6 et iOS 7 et storyboard:
Vous pouvez définir l'image dans votre storyboard:
Puis:
la source
Si l'UIButton ne semble pas écouter les paramètres de contrainte de disposition, vérifiez si les images sont plus grandes que la taille du bouton. Utilisez toujours les images @ 2x et @ 3x pour les résolutions de la rétine.
la source
Ces deux choses (qui sont assez difficiles à trouver au départ) étireront votre image UIButton pour l'adapter à la taille du bouton:
on devrait toujours essayer de définir un tel dans le Storyboard plutôt que dans le code.
la source