iOS UIButton与UITextAlignmentLeft仍然居中文本?

时间:2012-02-17 19:19:14

标签: objective-c ios cocoa-touch uibutton

问题:
设置按钮titleEdgeInsetUITextAlignmentLeft后,按钮的标题仍然居中,而不是左对齐。

详细信息:
我有一个200px宽的按钮,使用自定义背景,左边是图像。由于我不希望按钮标题覆盖图像,因此我使用titleEdgeInset=UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0);插入标题。这应该使标题标签的x位置从45px开始并以200px结束。我还希望按钮的标题与图像左对齐,所以我也设置了textAlignment = UITextAlignmentLeft。但是,标题文本仍然位于45px和200px之间,而不是左对齐。

为什么?

以下是相关代码:

button.titleEdgeInsets = UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0);
button.titleLabel.textAlignment = UITextAlignmentLeft;
[button setTitle:@"X"];

6 个答案:

答案 0 :(得分:80)

我的测试代码:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 200, 72);
UIImage *image = [UIImage imageNamed:@"rob.png"];
[button setImage:image forState:UIControlStateNormal];
button.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[button setTitle:@"Hello" forState:UIControlStateNormal];
button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.view addSubview:button];

请注意,我设置了button.contentHorizontalAlignment,而不是button.titleLabel.textAlignment。我的结果:

Screen shot of label

答案 1 :(得分:22)

为按钮设置contentHorizo​​ntalAlignment属性,它将起作用。

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

Swift 4.0

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center

答案 2 :(得分:4)

在titleLabel上添加背景颜色。我认为它的大小适合,因此文本对齐无关紧要。它只要它需要它。您需要解决的是标签本身的位置。您可能必须扩展UIButton并覆盖layoutSubviews才能使其正确。我从来没有见过带有中心标签的按钮。

答案 3 :(得分:2)

为按钮设置contentHorizo​​ntalAlignment属性:

yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

答案 4 :(得分:1)

Swift 3

设置contentHorizo​​ntalAlignment属性做好工作。感谢

yourButton.contentHorizontalAlignment = .left

答案 5 :(得分:0)

只需覆盖按钮的setter并尝试在setter中设置contentHorizo​​ntalAlignment属性:

-(UIButton *)yourButton {
      [_yourButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];

    return _yourButton;
}