无论图像大小如何,都获取要对齐的UIButton的标签

时间:2018-08-27 20:56:45

标签: ios swift uibutton

我有几个按钮要添加到视图控制器中,每个按钮都有不同的图像和标签。

我希望按钮的标签按其前边缘对齐,并且最好使图像按垂直中心对齐,尽管我只想对标签进行对齐。

使用UIButton本身的设置是否可行?还是只用图像和标签创建自定义视图会更好?

这是我意思的粗略例子。绿色是按钮,红色是图像。

基本上,我想为图像定义一个最大尺寸,使图像居中,并且标签将始终与该设置尺寸对齐,以便对齐。

我已经通过情节提要实现了这一点,方法是在每个按钮上设置自定义插图以获取对齐方式,但是由于Reveal View Controller,我正在重新创建View Controller以克服一些限制。这是我们的菜单“后视图”。我们希望能够更动态地选择使用哪个视图控制器作为前视图控制器,而使用情节提要板似乎并不可行。您必须明确设置将其作为前视图。

enter image description here

1 个答案:

答案 0 :(得分:1)

要使按钮中的文本与不同大小的图像对齐……

  1. 设置所有按钮的contentHorizontalAlignment = .left
  2. 计算最宽图像的宽度…

let maxWidth = [button1, button2, button3].map({$0!.imageView!.image!.size.width}).max()!

  1. 要将所有内容移至右侧(因此将空间设置在图像的左侧),请设置按钮的contentEdgeInsets.left。要将文本进一步向右移动(设置图像和文本之间的间距),请设置按钮的titleEdgeInsets.left

喜欢这个……

let minInset: CGFloat = 8 // largest image has inset of 8 to left and right
for button in [button1, button2, button3] {

    let imageWidth = button!.imageView!.image!.size.width
    let inset = (maxWidth + (minInset * 2) - imageWidth) / 2

    button?.contentEdgeInsets.left = inset
    button?.titleEdgeInsets.left = inset
}

您应该以...

结尾

enter image description here