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

问题描述 投票:0回答:15

我需要在

UIButton
的左侧显示电子邮件地址,但它被定位到中心。

有什么方法可以将对齐方式设置为

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];
ios objective-c xcode cocoa-touch uibutton
15个回答
1684
投票

设置内容水平对齐方式:

// Swift 
emailBtn.contentHorizontalAlignment = .left;

// Objective-C
emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

您可能还想调整左侧插入的内容,否则文本将触及左边框:

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

// Objective-C
emailBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

126
投票

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

UIButton in IB

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

enter image description here


44
投票

在 Swift 3+ 中:

button.contentHorizontalAlignment = .left

20
投票

斯威夫特4+

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

15
投票
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

10
投票

使用

emailBtn.titleEdgeInsets
contentEdgeInsets
更好,以防您不想更改按钮内的整个内容位置。


8
投票

这里解释了如何做到这一点以及为什么它如此有效: http://cocoathings.blogspot.com/2013/03/how-to-make-uibutton-text-left-or-right.html


7
投票

在 xcode 8.2.1 中,界面生成器中它移动到:enter image description here


5
投票

@DyingCactus 的代码中有一个小错误。 这是向 UIButton 添加 UILabel 以对齐按钮文本以更好地控制按钮“标题”的正确解决方案:

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];

希望这有帮助......


3
投票

对于 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

2
投票

尝试

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

0
投票

tl;dr:使用

UIButton.Configuration
- 执行
titleAlignment = .center
,同时添加字幕并使其字体变小。


所以,我们在 iOS 15+ 上,我们正在使用新的

UIButton.Configuration
API,按钮现在默认为多行,而您正在尝试弄清楚 - 如何使按钮的标题居中或尾随对齐,而不是默认(前导)。例如,您在下面有一个图像和一个按钮标题,并且您希望它居中。

enter image description here

尝试这个似乎是合理的:

configuration.titleAlignment = .center

但这并没有改变任何事情。

通过在 Interface Builder 中尝试,我注意到以下内容:

titleAlignment
仅当标题与副标题一起存在时才有效。

enter image description here

我不确定这是否是苹果方面的疏忽(稍后可能会修复)或者是否有充分的理由。无论如何,我们需要一种方法让它在没有字幕的情况下工作。也许一些聪明的

contentInset
UIControl.contentHorizontalAlignment
可以做到这一点,但我担心在我们必须考虑其他语言、动态类型等的情况下使用这些。

这是一个仍然很棘手的解决方案,但可以完成工作: 添加一个仅包含空格的

subtitle
,然后使字体变小,例如
0.01

这是在代码中执行此操作的方法,假设您已经在使用

UIButton.Configuration
:

configuration.titleAlignment = .center
configuration.title = "Hello hi"
configuration.subtitle = " "
configuration.subtitleTextAttributesTransformer = UIConfigurationTextAttributesTransformer({ input in
    var output = input
    output.font = .systemFont(ofSize: 0.01)
    return output
})

这不是一个理想的解决方案,将来可能会崩溃,但对于某些用例来说,这是目前最好的可用解决方案。


0
投票

使用 Swift 3+,您只需一行即可完成:

myButton.contentHorizontalAlignment = .left

-1
投票

如果您使用

button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
,您将收到一条警告,指出
'contentEdgeInsets' was deprecated in iOS 15.0: This property is ignored when using UIButtonConfiguration
。另一种解决方案是:

iOS 15.0+

    var button: UIButton = {
        let button = UIButton(configuration: .filled())

        button.configuration?.contentInsets = NSDirectionalEdgeInsets(top: 16, leading: 20, bottom: 16, trailing: 20)
        button.contentHorizontalAlignment = .leading
        
        return button
    }()
© www.soinside.com 2019 - 2024. All rights reserved.