web-dev-qa-db-fra.com

Comment redimensionner une image dans un UIButton par programme?

J'ai cet UIButton et une image à intégrer. Je ne veux pas que l'image prenne toute la place à l'intérieur du bouton, mais juste une petite partie au centre, mais si je redimensionne le bouton, elle sera redimensionnée l'image aussi . Comment puis-je faire cela, y a-t-il une option pour définir la dimension que je veux indépendamment de la taille du bouton UIButton? Merci!

6
Elia Crocetta

Cela peut être fait par le code de la manière suivante:

let imageSize:CGSize = CGSize(width: 20, height: 20)

let button:UIButton = UIButton(type: UIButtonType.custom)
button.frame = CGRect(x: 200, y: 200, width: 60, height: 60)
button.backgroundColor = UIColor.yellow
button.setImage(UIImage(named: "chat.png"), for: UIControlState.normal)

// The below line will give you what you want    
button.imageEdgeInsets = UIEdgeInsetsMake(
    (button.frame.size.height - imageSize.height) / 2, 
    (button.frame.size.width - imageSize.width) / 2, 
    (button.frame.size.height - imageSize.height) / 2, 
    (button.frame.size.width - imageSize.width) / 2)

self.view.addSubview(button)

De cette façon, vous pouvez réaliser ce que vous vouliez.

10
KrishnaCA

Vous pouvez expérimenter avec des incrustations de vue d'image. Chaque UIButton a une propriété imageView.

Dans Swift 3, vous pouvez le faire comme ceci:

//let button = UIButton()
button.imageView?.backgroundColor = UIColor.red
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)

fond rouge est juste pour que vous sachiez ce qui change

7
repoguy

Je le ferais de cette façon:

Une UIButton est juste une UIView. Vous pouvez simplement ajouter une UIImageView avec une image définie et appeler addSubview sur la UIButton.

Vous devez également définir userInteractionEnabled sur false sur UIImageView.

4
KVISH

Compte tenu de ce que KVISH a dit avant d’avoir mis cela en œuvre, cela a fonctionné comme prévu. J'ai posté ceci parce que Houman a demandé un exemple.

//grab the image using the name of the pic
var image = UIImage(named: "picture")

//set the size for the image
image = image?.resize(toWidth: 18)
image = image?.resize(toHeight: 18)

//set the image to the button
buttonName.setImage(image, for: UIControlState.normal)

//adjust the position
buttonName.imageEdgeInsets = UIEdgeInsetsMake(8,16,9,0)
0
Joule87