Это на самом деле довольно просто. Просто добавьте ширину изображения к кнопке contentEdgeInsets.right
:
let t = "Text I want centered".uppercased()
let i = UIImage(named: "person.fill")
let button = UIButton(type: .system)
button.layer.borderWidth = 1
view.addSubview(button)
button.setTitle(t, for: .normal)
button.setImage(i, for: .normal)
button.contentEdgeInsets.right = i?.size.width ?? 0
button.sizeToFit()
print(button.frame.width) // prints "212.0"
print(button.titleLabel?.frame) // prints "(19.0, 1.0, 174.0, 18.0)"
. print
операторы показывают, что titleLabel
идеально отцентрирован (с 19,0 + 174,0 + 19,0 = 212,0).