¿Cómo hacer que el centro de alineación de texto de UIButton? Usando IB

139

No puedo establecer el título de UIButton usando IB como centro. Mi título es multilínea.
Está dando como este
ingrese la descripción de la imagen aquí

Pero quiero como este
ingrese la descripción de la imagen aquí

He dado espacio en esto pero no quiero hacer eso. Como no está alineado exactamente para algunos casos y sé que hay una propiedad de UILabel para establecer la alineación, pero no quiero escribir un código para eso ... solo quiero configurar todo desde IB.

Gracias

Inder Kumar Rathore
fuente
77
Kumar Rathor - prueba por códigoself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari
1
@Spark Sé cómo hacer esto por código, pero lo que quería es configurarlo usando 'IB'.
Inder Kumar Rathore
Lo sé, te gustaría configurarlo usando IB. Pero dicha propiedad solo es accesible a través del código.
Sagar R. Kothari
Es accesible a través de IB haciéndolo atribuir, ¡pero a quién le importa eso!
Youssef Moawad
@YoussefSami sí, tienes razón stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

Respuestas:

197

Esto hará exactamente lo que esperabas:

C objetivo:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Para iOS 6 o superior es

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

como se explica en la respuesta de tyler53

Rápido:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.xy superior

myButton.titleLabel?.textAlignment = .center
RGML
fuente
1
Se ha convertido en NSTextAlignment en versiones posteriores de iOS.
Sullivan
44
el código no funciona, la mejor respuesta es @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier
8
La pregunta menciona explícitamente IB , como en Interface Builder . Esta no es la respuesta correcta, ya que requiere codificación.
Arquitecto Swift
1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black
'Centro' ha sido renombrado como 'centro'
ModusPwnens
106

Usa la línea:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Esto debería centrar el contenido (horizontalmente).

Y si también desea establecer el texto dentro de la etiqueta en el centro, use:

[labelOne setTextAlignment:UITextAlignmentCenter];

Si desea usar IB, tengo un pequeño ejemplo aquí que está vinculado en XCode 4 pero debe proporcionar suficientes detalles (también tenga en cuenta que, en la parte superior de esa pantalla de propiedades, muestra la pestaña de propiedades. Puede encontrar las mismas pestañas en XCode 3.x): ingrese la descripción de la imagen aquí

Joetjah
fuente
1
gracias ... pero no quiero configurarlo a través de IB. :( esa es mi última opción de hacer eso ...
Inder Kumar Rathore
1
@Inder Kumar Rathore: No hay problema. Para configurarlo en IB, debe hacer clic en la etiqueta, luego en el Inspector de atributos, establecer Alineación en "Centro". En mi IB (XCode 4), tiene 3 iconos que muestran la alineación del texto. Obviamente, deberías elegir el del medio entonces.
Joetjah
¿podrían enviarme la captura de pantalla ... ¿Es esta la etiqueta del botón o han sacado el UILabel de la biblioteca? Supongo que UILabel no es la etiqueta del botón
Inder Kumar Rathore
@Inder Kumar Rathore: Hola, mira la captura de pantalla que agregué. De hecho, he confundido el tipo de etiquetas que usa, todavía estaba pensando en UILabel en lugar del texto en UIButton. La captura de pantalla muestra cómo alinearse en el UIButton a través de IB.
Joetjah
1
No me deja editar, pero NSTextAlignmentCenter ha tomado el lugar de UITextAlignmentCenter. Significan exactamente lo mismo aunque. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard
89

Solución1

Puede establecer la ruta clave en el guión gráfico

Establezca el texto en su título multilínea, por ejemplo, hello + multiline

Debe presionar + para mover el texto a la siguiente línea.

ingrese la descripción de la imagen aquí

Luego agregue la ruta clave

titleLabel.textAlignmentas Numbery value 1, 1significa NSTextAlignmentCenter
titleLabel.numberOfLinesas Numbery value 0, 0significa cualquier número de líneas

ingrese la descripción de la imagen aquí

Esto no se reflejará en IB / Xcode, pero estará en el centro en el tiempo de ejecución (dispositivo / simulador)

Si desea ver los cambios en Xcode, debe hacer lo siguiente: (recuerde que puede omitir estos pasos)

  1. Subclase el botón UIB para hacer que el botón sea designable:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Asigne esta subclase designable a los botones que está modificando:

Mostrando cómo cambiar la clase del botón usando Interface Builder

  1. Si lo hace bien, verá la actualización visual en IB cuando el estado Designables esté "Al día" (lo que puede llevar varios segundos):

Comparación del botón designado y predeterminado en Interface Builder



Solution2

Si quieres escribir el código, entonces haz el largo proceso

1.Cree el IBOutletbotón
2.Escriba el código en viewDidLoad

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


Solución3

En la versión más reciente de xcode (la mía es xcode 6.1), tenemos el título de propiedad atribuido
Seleccione, Attributedluego seleccione el texto y presione la opción central a continuación

PD: el texto no venía de varias líneas para eso tengo que configurar el

btn.titleLabel.numberOfLines = 0

ingrese la descripción de la imagen aquí

Inder Kumar Rathore
fuente
Para la solución 3, simplemente puede agregar Line Breaking = Clip, transformará el texto en multilínea
finx
La solución 3 tiene un problema, al menos con Xcode 11.3.1: cuando cambio el título del botón, no funciona. cuando solía btn.titleLabel.textAlignment, funciona muy bien.
Brian Hong
27

Para UIButton debes usar: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Sirji
fuente
16

Para ios 8 y Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

o

btn.titleLabel.textAlignment = .Center

Eduardo Fiorezi
fuente
13

Para aquellos de ustedes que ahora usan iOS 6 o superior, UITextAlignmentCenter ha quedado en desuso. Ahora es NSTextAlignmentCenter

EJEMPLO: mylabel.textAlignment = NSTextAlignmentCenter;Funciona perfectamente.

tyler53
fuente
12

Para swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
Shan Ye
fuente
Configuré myButton.titleLabel? .NumberOfLines = 0 y causó que la etiqueta dentro del botón se centrara, por lo que estaba tratando de descubrir cómo alinear el texto a la izquierda dentro del botón y esto funcionó, configurándolo en .left sin embargo.
maxcodes
7

Suponiendo que btn se refiere a un UIButton, para cambiar un título de varias líneas para que esté centrado horizontalmente, puede usar la siguiente instrucción en iOS 6 o posterior:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
usuario1862723
fuente
4

UITextAlignmentCenter está en desuso en iOS6

En su lugar, puede usar este código:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
fuente
No hay propiedad para UIButton callee textAlignment.
Ravi
No existe tal propiedad para UIButton en iOS
Jayprakash Dubey
Se refiere a button.titleLabel.textAlignment
OC Rickard
4

Para Swift 3.0

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

Para Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Grzegorz R. Kulesza
fuente
use uno "?" en sender.titleLabel? en cambio "??"
Владимир Ковальчук
3

En realidad, puedes hacerlo en el generador de interfaces.

Debe establecer Título en "Atribuido" y luego elegir la alineación central.

Alexander Danilov
fuente
Si se le atribuye, no podemos establecer el color del texto, la fuente, etc. a través de Storyboard.
Vineesh TP
3

Intenta así:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Poli
fuente
2

Puedes hacer esto desde el guión gráfico. Selecciona tu botón. Establezca el salto de línea 'Word Wrap', establezca su título 'Plain' en 'Attributed'. Seleccione 'Alineación central'. Esta parte es importante => Haga clic en el botón ... (Más). Y seleccione el modo de salto de línea a 'Ajuste de caracteres'.

Mustafa Karakuş
fuente
1

UIButton no admitirá setTextAlignment. Por lo tanto, debe ir con setContentHorizontalAlignment para la alineación del texto del botón

Para tu referencia

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
btmanikandan
fuente