UIButton:容器中的文本居中,左侧图像居中

UIButton: Center text in container and left image to the side

我希望我的 UIButton 将文本居中,然后在此基础上将图像放置在其左侧。

到目前为止,我有这个例子(下图),但文本没有居中(检查红线)。此外,蓝色背景旨在显示此按钮的总宽度。

我怎样才能做到这一点?

其实很简单。只需将图像的宽度添加到按钮的 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)。