iOS中的UIButton使用UITextAlignmentLeft仍然居中对齐文本?

29
问题:
在设置按钮的titleEdgeInsetUITextAlignmentLeft后,按钮的标题仍然居中显示而非左对齐。 细节:
我有一个200像素宽的按钮,使用带有左侧图像的自定义背景。由于我不想让按钮标题覆盖图像,我使用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个回答

81

我的测试代码:

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。我的结果:

标签截图


22

设置按钮的contentHorizontalAlignment属性,它将起作用。

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

Swift 4.0

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center

4

在titleLabel上添加一个背景颜色。我猜它是被调整大小以适应文本的长度,所以文本对齐方式并不重要。它只有需要的长度那么长。你需要解决的问题是标签本身的位置。你可能需要扩展UIButton并覆盖layoutSubviews来解决这个问题。我从未见过一个带有任何非居中标签的按钮。


2

为按钮设置contentHorizontalAlignment属性:

yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

1

Swift 3

设置contentHorizontalAlignment属性即可完成工作。谢谢。

yourButton.contentHorizontalAlignment = .left

0
只需覆盖按钮的setter并尝试在setter中设置contentHorizontalAlignment属性即可:
-(UIButton *)yourButton {
      [_yourButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];

    return _yourButton;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接