Как масштабировать изображения на UIButton в Swift?

var button = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
var image = UIImage(named: "myimage.png") as UIImage!
button.frame = CGRectMake(0, 0, 100, 100)
button.setImage(image, forState: .Normal)

У меня есть изображение, которое я установил на своей кнопке, но я хотел бы масштабировать его меньше, чем кнопка (например, изображение должно быть 50,50) и центр в кнопке. Как я могу сделать это в Swift?

5 ответов


Xcode 8.3.1 * Swift 3.1

let button = UIButton(type: .custom)
let image = UIImage(named: "myimage.png")

func buttonTouchDown(_ button: UIButton) {
    print("button Touch Down")
}

override func viewDidLoad() {
    super.viewDidLoad()
    button.frame = CGRect(x: 0, y: 0 , width: 100, height: 100)
    button.backgroundColor = .clear
    button.addTarget(self, action: #selector(buttonTouchDown), for: .touchDown)
    button.setTitle("Title", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.setImage(image, for: .normal)
    button.imageEdgeInsets = UIEdgeInsetsMake(25,25,25,25)
    view.addSubview(button)
}

или через XIB после выбора UIButton.

просто убедитесь, что все ваши вставки одинаковы.


enter image description here


Ther-гораздо более простой способ сделать это, когда вам не нужно иметь дело с вставками содержимого. Вот это:

var button = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
var image = UIImage(named: "myimage.png") as UIImage!
button.frame = CGRectMake(0, 0, 100, 100)
button.setImage(image, forState: .Normal)
button.contentMode = .center
button.imageView?.contentMode = .scaleAspectFit

Swift 4, Swift 3

var image = UIImage(named: "myimage") as UIImage!   
btnetc.setImage(image, for: .normal)
btnetc.imageView?.contentMode = .scaleAspectFill

или

btnetc.imageView?.contentMode = .scaleAspectFit

или

btnetc.imageView?.contentMode = .scaleToFill

Если у вас есть этот вопрос и кнопка внутри stackView

выберите кнопку и добавьте ограничение: соотношение сторон

Он должен (в зависимости от конфигурации stackView) сохранить аспект.

надеюсь, что это помогает.