Como tornar o centro de alinhamento de texto do UIButton? Usando IB

139

Não consigo definir o título do UIButton usando IB como centro. Meu título é multi-linha.
Está dando assim
insira a descrição da imagem aqui

Mas eu quero assim
insira a descrição da imagem aqui

Eu dei espaço nisso, mas não quero fazer isso. Como ele não está alinhado exatamente em alguns casos, e eu sei que existe uma propriedade do UILabel para definir o alinhamento, mas não quero escrever um código para isso .. só quero definir tudo do IB.

obrigado

Inder Kumar Rathore
fonte
7
Kumar Rathor - tentativa por códigoself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari
1
@Park Eu sei como fazer isso por código, mas o que eu queria é defini-lo usando 'IB'.
Inder Kumar Rathore 26/03
Eu sei, você gostaria de configurá-lo usando o IB. Mas essa propriedade é acessível apenas via código.
Sagar R. Kothari 26/03
É acessível via IB, tornando-o atribuído, mas quem se importa com isso!
Youssef Moawad
@YoussefSami sim você está certo stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

Respostas:

197

Isso fará exatamente o que você estava esperando:

Objetivo-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Para iOS 6 ou superior, é

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

como explicado na resposta de tyler53

Rápido:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.xe acima

myButton.titleLabel?.textAlignment = .center
RGML
fonte
1
Tornou-se NSTextAlignment em versões posteriores do iOS.
Sullivan
4
thas código não trabalho, a melhor resposta é @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier
8
A pergunta menciona explicitamente o IB , como no Interface Builder . Esta não é a resposta correta, pois requer codificação.
precisa saber é o seguinte
1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black
'Center' foi renomeado para 'center'
ModusPwnens
106

Use a linha:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Isso deve centralizar o conteúdo (horizontalmente).

E se você deseja definir o texto dentro da etiqueta também para o centro, use:

[labelOne setTextAlignment:UITextAlignmentCenter];

Se você deseja usar o IB, eu tenho um pequeno exemplo aqui, que está vinculado no XCode 4, mas deve fornecer detalhes suficientes (lembre-se, no topo dessa tela de propriedades, ele mostra a guia de propriedades. Você pode encontrar as mesmas guias no XCode 3.x): insira a descrição da imagem aqui

Joetjah
fonte
1
obrigado ... mas eu não quero configurá-lo através do IB. :( essa é a minha última opção de fazer isso ...
Inder Kumar Rathore
1
@ Indro Kumar Rathore: Não há problema. Para configurá-lo no IB, você deve clicar no rótulo e, no Inspetor de atributos, defina Alinhamento como "Centro". No meu IB (XCode 4), ele possui 3 ícones mostrando o alinhamento do texto. Obviamente, você deve escolher o meio então.
Joetjah
você pode me enviar a captura de tela ... Esse é o rótulo do botão ou você arrastou o UILabel da biblioteca ??? Eu suponho que ele não é o rótulo do botão
Inder Kumar Rathore
@Nd Kumar Rathore: Ei, confira a captura de tela que adicionei. Eu realmente confundi o tipo de etiquetas que você usa, eu ainda estava pensando no UILabel em vez do texto no UIButton. A captura de tela mostra como alinhar no UIButton pelo IB.
Joetjah
1
Não me deixou editar, mas NSTextAlignmentCenter substituiu UITextAlignmentCenter. Eles significam exatamente a mesma coisa. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard
89

Solução1

Você pode definir o caminho da chave no storyboard

Defina o texto para o título da sua multilinha, por exemplo, hello + multiline

Você precisa pressionar + para mover o texto para a próxima linha.

insira a descrição da imagem aqui

Em seguida, adicione o caminho da chave

titleLabel.textAlignmentas Numberand value 1, 1significa NSTextAlignmentCenter
titleLabel.numberOfLinesas Numberand value 0, 0significa qualquer número de linhas

insira a descrição da imagem aqui

Isso não será refletido no IB / Xcode, mas estará no centro no tempo de execução (dispositivo / simulador)

Se você quiser ver as alterações no Xcode, faça o seguinte: (lembre-se de que você pode pular estas etapas)

  1. Subclasse o UIButton para tornar o botão designável:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Atribua esta subclasse designável aos botões que você está modificando:

Mostrando como alterar a classe do botão usando o Interface Builder

  1. Se estiver certo, você verá a atualização visual no IB quando o estado Designáveis ​​estiver "Atualizado" (o que pode levar alguns segundos):

Comparando o botão designável e padrão no Interface Builder



Solução2

Se você quiser escrever o código, faça o longo processo

1.Criar IBOutletpara o botão
2.Write code in viewDidLoad

btn.titleLabel.textAlignment = .Center
btn.titleLabel.numberOfLines = 0


Solução3

Na versão mais recente do xcode (a minha é xcode 6.1), temos um atributo atribuído à propriedade
Selecione Attributed, selecione o texto e pressione a opção central abaixo

PS O texto não estava chegando multilinha para que eu tenho que definir o

btn.titleLabel.numberOfLines = 0

insira a descrição da imagem aqui

Inder Kumar Rathore
fonte
Para solução de 3, você pode simplesmente adicionar Line Breaking = Clip, ele irá transformar o texto para várias linhas
Finx
A solução 3 tem um problema, pelo menos com o Xcode 11.3.1: quando altero o título do botão, ele não funciona. quando eu usei btn.titleLabel.textAlignment, funciona muito bem.
Brian Hong
27

Para o UIButton, você deve usar: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Sirji
fonte
16

Para ios 8 e Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

ou

btn.titleLabel.textAlignment = .Center

Eduardo Fiorezi
fonte
13

Para aqueles que agora usam o iOS 6 ou superior, o UITextAlignmentCenter foi preterido. Agora é NSTextAlignmentCenter

EXEMPLO: mylabel.textAlignment = NSTextAlignmentCenter;Funciona perfeitamente.

tyler53
fonte
11

Para swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
Shan Ye
fonte
Eu configurei myButton.titleLabel? .NumberOfLines = 0 e ele fez com que o rótulo dentro do botão ficasse centralizado, então eu estava tentando descobrir como alinhar o texto à esquerda dentro do botão e isso funcionou, configurando-o como .left no entanto.
maxcodes
7

Supondo que btn se refira a um UIButton, para alterar uma legenda de várias linhas para centralizar horizontalmente, você pode usar a seguinte instrução no iOS 6 ou posterior:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
user1862723
fonte
4

UITextAlignmentCenter foi descontinuado no iOS6

Em vez disso, você pode usar este código:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
fonte
Não há propriedade para UIButton callee textAlignment.
Ravi
Não existe tal propriedade para UIButton no iOS
Jayprakash Dubey
Ele significa button.titleLabel.textAlignment
OC Rickard
4

Para Swift 3.0

btn.titleLabel?.textAlignment = .center
Morten Gustafsson
fonte
4

Para o Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Grzegorz R. Kulesza
fonte
use um "?" em sender.titleLabel? em vez de "??"
214198 #
3

Na verdade, você pode fazer isso no construtor de interfaces.

Você deve definir o Título como "Atribuído" e escolher o alinhamento central.

Alexander Danilov
fonte
Se for atribuído, não podemos definir a cor do texto, a fonte etc. através do Storyboard.
Vineesh TP
3

Tente assim:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Bobby
fonte
2

Você pode fazer isso no storyboard. Selecione seu botão. Defina quebra de linha 'quebra automática de linha', defina seu título 'comum' como 'atribuído'. Selecione 'Alinhar ao centro'. Esta parte é importante => Clique no botão ... (Mais). E selecione o modo de quebra de linha para 'Quebra de caracteres'.

Mustafa Karakuş
fonte
1

O UIButton não suporta setTextAlignment. Então, você precisa ir com setContentHorizontalAlignment para o alinhamento do texto do botão

Para sua referência

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
btmanikandan
fonte