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.