Como definir o título do UIButton como alinhamento à esquerda?

472

Preciso exibir o endereço de email do lado esquerdo de um UIButton, mas ele está sendo posicionado no centro.

Existe alguma maneira de definir o alinhamento no lado esquerdo de a UIButton?

Este é o meu código atual:

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];
Madan Mohan
fonte

Respostas:

1567

Defina o contentHorizontalAlignment:

emailBtn.contentHorizontalAlignment = .left;

Você também pode ajustar o conteúdo deixado à esquerda, caso contrário o texto tocará na borda esquerda:

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

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);
Me amarre
fonte
44
Lembre-se de que você também pode definir essas duas propriedades no Interface Builder.
Mihai Damian
1
por isso foi número 9000 de mim, thanx, resposta útil
Logic
6
Estamos com preguiça de procurar a documentação. O que faríamos sem o SO!
Kedar Paranjape
3
Mostra que o SO está melhor documentado do que o documento da Apple.
GeneCode 13/10
1
UIControlContentHorizontalAlignmentLeadinge UIControlContentHorizontalAlignmentTrailingforam adicionados no iOS 11
Cal Stephens
118

Você também pode usar o construtor de interface se não quiser fazer os ajustes no código. Aqui eu deixei alinhar o texto e também recuar alguns:

UIButton no IB

Não esqueça que você também pode alinhar uma imagem no botão:

insira a descrição da imagem aqui

n8tr
fonte
Isso me ajudou muito, não posso acreditar que não sabia que era para isso que eram esses controles.
Ethan Parker
Obrigado, isso me ajudou. Não consegui descobrir inserções de borda para o título do botão sem a ajuda da indicação de seta em suas fotos de amostra.
Ashok
no Xcode 8.2.1 mudou-se para outro lugar ver minha resposta abaixo
Dang
Como fazer isso programaticamente rapidamente? Quero alinhar imagem à direita e título no lado esquerdo ???
Visal Sambo
36

No Swift 3+:

button.contentHorizontalAlignment = .left
Vincent
fonte
13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
bhavik
fonte
13

Swift 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Mohammad Zaid Pathan
fonte
9

Usar emailBtn.titleEdgeInsetsé melhor que contentEdgeInsets, caso você não queira alterar toda a posição do conteúdo dentro do botão.

Gabriel
fonte
7

no xcode 8.2.1 no construtor de interface, ele se move para:insira a descrição da imagem aqui

dang
fonte
5

Há um pequeno erro no código de @DyingCactus. Aqui está a solução correta para adicionar um UILabel a um UIButton para alinhar o texto do botão para controlar melhor o botão '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];

Espero que isto ajude....

Al

Al-Noor Ladhani
fonte
2

Para o Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Isso pode ajudar se for necessário.

Suraj Sonawane
fonte
2

No Swift 5.0 e no Xcode 10.2

Você tem duas maneiras de abordar

1) Abordagem direta

btn.contentHorizontalAlignment = .left

2) Exemplo de SharedClass (escreva uma vez e use todos os itens)

Esta é sua classe compartilhada (assim você acessa todas as propriedades dos componentes)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

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

Na sua chamada ViewController como esta

button.btnProperties()//This is your button
iOS
fonte
1

Tentar

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
Gev
fonte
1
Isso funcionou para mim, contentHorizontalAlignment não, obrigado.
Danfordham 14/09/19