如何将UIButton的标题设置为左对齐?


472

我需要从的左侧显示电子邮件地址UIButton,但是它位于中间。

有什么方法可以将对齐方式设置为a的左侧UIButton吗?

这是我当前的代码:

UIButton* emailBtn = [[UIButton alloc] initWithFrame:CGRectMake(5,30,250,height+15)];
emailBtn.backgroundColor = [UIColor clearColor];
[emailBtn setTitle:obj2.customerEmail forState:UIControlStateNormal];
emailBtn.titleLabel.font = [UIFont systemFontOfSize:12.5];
[emailBtn setTitleColor:[[[UIColor alloc]initWithRed:0.121 green:0.472 blue:0.823 alpha:1]autorelease] forState:UIControlStateNormal];
[emailBtn addTarget:self action:@selector(emailAction:) forControlEvents:UIControlEventTouchUpInside];
[elementView addSubview:emailBtn];
[emailBtn release];

Answers:


1566

设置contentHorizo​​ntalAlignment:

emailBtn.contentHorizontalAlignment = .left;

您可能还需要调整左插图的内容,否则文本将触摸左边框:

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

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);

44
请记住,您还可以从Interface Builder设置这两个属性。
Mihai Damian

1
所以这是我收到的9000,thanx,有用的答案
逻辑

6
我们懒得搜索文档。如果没有SO,我们该怎么办!
Kedar Paranjape,2015年

3
证明SO比Apple文件更好地记录在案。
GeneCode

1
UIControlContentHorizontalAlignmentLeadingUIControlContentHorizontalAlignmentTrailing分别在iOS的11加
卡尔·斯蒂芬斯

118

如果您不想在代码中进行调整,也可以使用界面生成器。在这里,我使文本左对齐并缩进一些:

IB中的UIButton

不要忘记,您也可以在按钮中对齐图像。

在此处输入图片说明


这帮助了我很多,不敢相信我没有意识到那是那些控件的目的。
伊桑·帕克

谢谢,它帮助了我。没有示例图片中的箭头指示,我无法找到按钮标题的边缘插图。
Ashok

在xcode 8.2.1中,它移到了其他地方,请参见下面的答案

如何以编程方式迅速做到这一点?我要在右侧对齐图像,在左侧对齐标题???
Visal Sambo

36

在Swift 3+中:

button.contentHorizontalAlignment = .left

13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

13

迅捷4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

9

如果您不想更改按钮内的整个内容位置,则使用emailBtn.titleEdgeInsets优于contentEdgeInsets



7

在接口构建器中的xcode 8.2.1中,它移至:在此处输入图片说明


5

@DyingCactus的代码中有一个小错误。这是将UILabel添加到UIButton来对齐按钮文本以更好地控制按钮'title'的正确解决方案:

NSString *myLabelText = @"Hello World";
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];

// position in the parent view and set the size of the button
myButton.frame = CGRectMake(myX, myY, myWidth, myHeight); 

CGRect myButtonRect = myButton.bounds;
UILabel *myLabel = [[UILabel alloc] initWithFrame: myButtonRect];   
myLabel.text = myLabelText;
myLabel.backgroundColor = [UIColor clearColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentLeft;

[myButton addSubview:myLabel];
[myLabel release];

希望这可以帮助....


2

对于Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

如果需要,这可以提供帮助。


2

Swift 5.0Xcode 10.2中

您有两种方法

1)直接方式

btn.contentHorizontalAlignment = .left

2)SharedClass示例(编写一次并使用每种商品)

这是您的共享类(像这样您可以访问所有组件属性)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

//UIButton extension
extension UIButton {
    func btnProperties() {
        contentHorizontalAlignment = .left
    }
}

在您的ViewController调用中,像这样

button.btnProperties()//This is your button

1

尝试

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
这对我有用,contentHorizo​​ntalAlignment没有,谢谢。
danfordham
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.