UIButton图像右侧居中文本

时间:2014-07-11 14:33:48

标签: ios objective-c cocoa-touch uibutton uilabel

我试图在文本的右侧获取图像(在IB中构建)。我发现here的一个想法是对UIButton进行子类化并覆盖:

- (CGRect)imageRectForContentRect:(CGRect)contentRect

- (CGRect)titleRectForContentRect:(CGRect)contentRect` which I did.

但在该示例中,图像一直被推到按钮的右边缘。我希望它出现在我的居中文本之后。所以,我想,如果我可以使用某种字体获得width of the label,我就可以这样做。

完美无缺。但。如果我在imageRectForContentRect这样做:

- (CGRect)imageRectForContentRect:(CGRect)contentRect
{
    CGSize textSize = [self.titleLabel.text sizeWithAttributes:@{NSFontAttributeName: self.titleLabel.font}];
}

我得到一个无限循环(因为调用self.titleLabel会调用imageRectForContent,它调用textSize代码等等。

所以那不行。

是否有另一种方法可以轻松地将图像放在文本的右侧,并带有居中文本的按钮?

我正在尝试这种方法,因为我想支持多种语言,按钮的文本可能有不同的长度。

2 个答案:

答案 0 :(得分:11)

- (void)swapImageText
{
    self.transform = CGAffineTransformScale(self.transform, -1.0f, 1.0f);
    self.titleLabel.transform = CGAffineTransformScale(self.titleLabel.transform, -1.0f, 1.0f);
    self.imageView.transform = CGAffineTransformScale(self.imageView.transform, -1.0f, 1.0f);
}

我的UIButton类别。如果假设任何UIButton具有身份转换,则将违反所有其他代码。

答案 1 :(得分:3)

这样做的一个简单概念,在IB中,在属性Ispector中,最后一个选项是“Edge” 从Edge下拉列表中选择Image并增加其左值,现在选择title并将其左值增加为负值。 现在将得到你的结果。