UIButton文本对齐?

13

我正在生成一些按钮,在按钮中显示用户给出的日期和参考ID。我希望这些数据在按钮内左对齐。

我尝试过:

[button.titleLabel setTextAlignment:UITextAlignmentLeft]; 
button.titleLabel.textAlignment = UITextAlignmentLeft;

但是这样做行不通。

 - (void)viewDidLoad
{
 [super viewDidLoad];
 [scrollView setScrollEnabled:YES];
 [scrollView setContentSize:CGSizeMake(320, 500)];

int i = 0;

for (CalculatorData *data in calcDatas) {

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];


    button.frame = CGRectMake(1 , 20 + i*40, 295, 30);

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MM/dd/yyyy HH:MM:SS"];

    NSString *dateString = [dateFormat stringFromDate:data.updateDate];

    NSString *title = [NSString stringWithFormat:@"%@ : %@",dateString,[data dataKey]];


    [button setTitle:title forState:UIControlStateNormal];


    [button addTarget:self action:@selector(buttonPressed:)
    forControlEvents:UIControlEventTouchUpInside];
    button.tag = data.calcId;


    [scrollView addSubview:button];
    i++;
}
8个回答

36

您可以使用contentHorizontalAlignment属性:

"接收器内内容(文本或图像)的水平对齐方式。"

以及contentVerticalAlignment属性:

"接收器内内容(文本或图像)的垂直对齐方式。"

示例用法:

button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;

它对我有效,谢谢先生。但设置titleLabel.setTextAlignment则不行。我认为尽管titleLabel是一个UILabel,但它的框架完全囊括了字符串(sizeThatFits),因此对textAlignment的调整甚至不会可见。 - iRon3.0

9
使用以下代码:
button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; 


button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

button.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

很好的调用,使用 button.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 来设置按钮的顶部插入以解决 contentVerticalAlignment 居中对齐按钮文本基线的问题。通过边缘插入,您可以进行调整并根据文本的视觉垂直中心点进行居中对齐。 - John Erck

2
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
button.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

1

enter image description here

请查看storyboard中的垂直内容对齐。

1
对于Swift 3,以下内容适用于我:
button.contentHorizontalAlignment = .left
button.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0)

0

Swift 3.x:

button.titleLabel?.textAlignment = .center

应该是 .left 吧? - cheznead
这样行不通...你得读之前的(其中正确的)答案... - eharo2

0
在Swift中,您可以使用以下代码: uibutton/uilabel.titleLabel?.textAlignment = .Center NSTextAlignment是一个枚举类型,因此您可以通过放置.VALUE来分配它。
以下是可能的对齐枚举:
case Left // 左对齐
case Center // Visually centered
case Right // Visually right aligned
/* !TARGET_OS_IPHONE */
// Visually right aligned
// Visually centered

case Justified // Fully-justified. The last line in a paragraph is natural-aligned.
case Natural // Indicates the default alignment for script

不适用于UIButton。 - eharo2

0

3
你不能像这样设置按钮文本的对齐方式。 - Vineesh TP

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