我是IOS开发和AutoLayout的新手。 我面临的问题是使用Storyboard在UI按钮内对齐图像和文本。我曾尝试使用TitleEdgeinset和ImageEdge插件来实现它,以便将Title(文本)垂直居中放置在Image下方。但问题是我有3个相似的按钮,它们是垂直堆叠的(StackView),而Text是动态设置的,因为我们有本地化的字符串(包括阿拉伯语rtl)。 图像和文本根据文本长度移动。是否有任何方法可以使所有按钮与图像和文本垂直对齐。此外,如果使用边缘插入,不同的屏幕分辨率当前不工作。感谢您的帮助 。提前谢谢。
答案 0 :(得分:13)
几天前,我解决了类似的问题,试试这个
private func adjustImageAndTitleOffsetsForButton (button: UIButton) {
let spacing: CGFloat = 6.0
let imageSize = button.imageView!.frame.size
button.titleEdgeInsets = UIEdgeInsetsMake(0, -imageSize.width, -(imageSize.height + spacing), 0)
let titleSize = button.titleLabel!.frame.size
button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0, 0, -titleSize.width)
}
为每个按钮调用此方法,例如
self.adjustImageAndTitleOffsetsForButton(yourButton)
答案 1 :(得分:1)
我修改了Ajay's answer,因为我的图片没有居中:
func centerButtonImageAndTitle(button: UIButton) {
let spacing: CGFloat = 5
let titleSize = button.titleLabel!.frame.size
let imageSize = button.imageView!.frame.size
button.titleEdgeInsets = UIEdgeInsets(top: 0, left: -imageSize.width, bottom: -(imageSize.height + spacing), right: 0)
button.imageEdgeInsets = UIEdgeInsets(top: -(titleSize.height + spacing), left: -imageSize.width/2, bottom: 0, right: -titleSize.width)
}
答案 2 :(得分:1)
这是一个对我有用的解决方案。只需在故事板中将按钮类设置为HorizontallyCenteredButton
,然后根据需要设置标题和图像的顶部和底部插图(将图像置于高于标题的位置),按钮将自动调整水平插入,使图像居中以上标题。
class HorizontallyCenteredButton: LocalizedButton {
override func awakeFromNib() {
super.awakeFromNib()
self.contentHorizontalAlignment = .left
}
override func layoutSubviews() {
super.layoutSubviews()
self.centerButtonImageAndTitle()
}
func centerButtonImageAndTitle() {
let size = self.bounds.size
let titleSize = self.titleLabel!.frame.size
let imageSize = self.imageView!.frame.size
self.imageEdgeInsets = UIEdgeInsets(top: self.imageEdgeInsets.top, left: size.width/2 - imageSize.width/2, bottom: self.imageEdgeInsets.bottom, right: 0)
self.titleEdgeInsets = UIEdgeInsets(top: self.titleEdgeInsets.top, left: -imageSize.width + size.width/2 - titleSize.width/2, bottom: self.titleEdgeInsets.bottom, right: 0)
}
}
答案 3 :(得分:0)
要垂直对齐所有按钮,首先选择按钮,然后单击标题为“对齐”的故事板右下角的按钮,最后在出现的菜单中选择“垂直中心”。这应该可以解决问题。
答案 4 :(得分:0)
答案 5 :(得分:-1)