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


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

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


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


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

16

Para ios 8 e Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

ou

btn.titleLabel.textAlignment = .Center


13

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

EXEMPLO: mylabel.textAlignment = NSTextAlignmentCenter;Funciona perfeitamente.


11

Para swift 4, xcode 9

myButton.contentHorizontalAlignment = .center

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;

4

UITextAlignmentCenter foi descontinuado no iOS6

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

btn.titleLabel.textAlignment=NSTextAlinmentCenter;


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 o Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}

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.


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;

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'.


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