web-dev-qa-db-fra.com

Comment centrer une image à l'intérieur d'un bouton UIB sans s'étirer dans les deux sens avec Swift?

Je crée un clavier personnalisé et je dois centrer l'image de l'icône de décalage dans le bouton de décalage. L'image est 100px x 100px. 

Cependant, le cadre du bouton dans portrait est 36pt x 38pt, et dans paysage, il est 68pt x 32pt. J'ai essayé d'utiliser la propriété incrustée d'image de bouton pour centrer l'image. Cependant, ce n'est pas le cas.

Je me suis essayé et définir l'image insère Edge à (25,25,25,25), l'image est centrée dans les deux tailles. Cependant, l'icône devient trop petite pour être vue.

shiftButton.setImage(UIImage(named: "shift"), forState: .Normal)

shiftButton.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0)

Je fais le bouton par programmation. Et j’ai besoin du bouton pour redimensionner en conservant son rapport hauteur/largeur, c’est-à-dire 1:1. Sa largeur ou hauteur maximale est toujours liée à la hauteur du bouton lui-même. La largeur/hauteur de l'image doit être au maximum de la hauteur du bouton. Et, il ne faut en aucun cas s'étirer pour déformer l'icône. Cependant, le bouton lui-même peut s'étirer.

J'ai besoin que l'image soit mise à l'échelle en fonction du cadre du bouton tout en maintenant son rapport d'aspect. Et, il peut réduire ou augmenter, mais devrait toujours conserver le ratio d'aspect 1: 1.

Des suggestions pour résoudre ce problème?

18
Ariel

Finalement, une solution est apparue. Vous devez définir le mode de contenu pour l'image à l'intérieur du bouton UIButton.

La solution consiste à mettre à jour la contentMode de la Image lorsque vous utilisez une image de premier plan dans un bouton avec la contentMode de la UIButton.

shiftButton.contentMode = .Center
shiftButton.imageView?.contentMode = .ScaleAspectFit
20
Ariel
  • Ajoutez des attributs d'exécution définis par l'utilisateur à votre bouton.

Dans la capture d'écran ci-dessous, la valeur 1 est égale à scaleAspectFit

imageView.ContentMode = scaleAspectFit

 enter image description here  enter image description here

9
Prateep Gedupudi

Définissez le mode de contenu du bouton sur Center:

shiftButton.contentMode = .Center
3
Viktor Simkó

J'ai pu centrer l'image en définissant les encarts de contenu sur 0 à l'aide de l'inspecteur de taille du storyboard:

 enter image description here

2
Justin Vallely