是否可以为UIButton的titleLabel调整x,y位置?


121

是否有可能调整x,y坐标为titleLabelUIButton

这是我的代码:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];     
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.titleLabel.frame = ???

1
请选择其他答案,以便我们删除非常否定的答案。否则请解释您为什么这样做。
tchrist 2012年

1
为什么不接受该答案?
Antonio MG 2013年

Answers:


445
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];

在Swift中

//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top

//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)

迅捷5

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.titleEdgeInsets = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 0.0, right: 0.0)

3
这绝对是最好的答案
greenisus 2011年

3
我想知道为什么问问者选择了其他答案。这个好多了。
约书亚

4
我什至不需要前两行...这setTitleEdgeInsets:是我发现转移文字所必需的。
ArtOfWarfare 2013年

这绝对是正确的,但使用接口构建器可能更容易完成(如我的回答中所述)。
eladleb

前两行将文本定位为0,0(x,y)。这样可以防止相对定位;特别是在xib中设置默认对齐方式时。
Jarrett Barnett

40

视觉上最简单的方法是使用属性检查器**(在编辑xib / storyboard时出现),将“ edge ”属性设置为title,调整其插图,然后将“ edge”属性设置为image,并相应地进行调整。它通常比编码更好,因为它更易于维护并且具有很高的视觉效果。

属性检查器设置


1
更改Edge为小技巧Title,然后调整插图!
Dean

供以后参考,从Xcode 8开始,edge可以在Size Inspector中调整标题插图,而不用设置属性。
dbmrq

14

从UIButton派生并实现以下方法:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

编辑:

@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end

@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
  contentRect.origin = titleOrigin;
  return contentRect;
}
@end

谢谢,这是我真正需要的。自动居中还不够。
dmzza 2014年

4

对于我的项目,我具有以下扩展实用程序:

extension UIButton {

    func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
        self.titleEdgeInsets.left += hOffset
        self.titleEdgeInsets.top += vOffset
    }

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.