Ich habe diesen UIButton und ein Bild, in das ich passen kann. Ich möchte nicht, dass das Bild den gesamten Platz innerhalb der Schaltfläche beansprucht, sondern nur einen kleinen Teil davon direkt in der Mitte, aber wenn ich die Größe der Schaltfläche verändere, ändert sich die Größe das Bild auch ... Wie kann ich das tun? Gibt es eine Option, um die gewünschte Größe unabhängig von der Größe des UIButton festzulegen? Danke.
Dies kann auf folgende Weise durch Code erfolgen:
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)
Auf diese Weise können Sie erreichen, was Sie wollten.
Sie können mit Bildansichtsinsets experimentieren. Jedes UIButton verfügt über eine Eigenschaft imageView.
In Swift 3 können Sie das so machen:
//let button = UIButton()
button.imageView?.backgroundColor = UIColor.red
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
roter Hintergrund ist nur, damit Sie wissen, was sich ändert
Ich würde es so machen:
Ein UIButton
ist nur ein UIView
. Sie können einfach ein UIImageView
mit einem festgelegten Bild hinzufügen und addSubview
für das UIButton
aufrufen.
Sie sollten auch userInteractionEnabled
auf false für UIImageView
setzen.
Unter Berücksichtigung dessen, was KVISH gesagt hat, habe ich dies implementiert und es hat wie erwartet funktioniert. Ich habe dies gepostet, weil Houman nach einem Beispiel gefragt hat.
//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)