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

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

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


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

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

13

Swift 4+

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

9

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



7

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


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


2

Para o Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Isso pode ajudar se for necessário.


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

1

Tentar

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
Isso funcionou para mim, contentHorizontalAlignment não, obrigado.
— Danfordham 14/09/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.