¿Cómo establecer el título de UIButton como alineación izquierda?


472

Necesito mostrar la dirección de correo electrónico desde el lado izquierdo de a UIButton, pero se está colocando en el centro.

¿Hay alguna forma de establecer la alineación al lado izquierdo de a UIButton?

Este es mi código actual:

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

Respuestas:


1568

Establezca el contenido Alineación horizontal:

emailBtn.contentHorizontalAlignment = .left;

Es posible que también desee ajustar el contenido que se inserta de lo contrario, de lo contrario, el texto tocará el borde izquierdo:

emailBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);

44
Tenga en cuenta que también puede establecer ambas propiedades desde Interface Builder.
Mihai Damian

1
así que fue el número 9000 de mí, gracias, respuesta útil
lógica

66
Somos demasiado vagos para buscar la documentación. ¿Qué haríamos sin SO?
Kedar Paranjape

3
Muestra que SO está mejor documentado que el documento de Apple.
GeneCode

1
UIControlContentHorizontalAlignmentLeadingy UIControlContentHorizontalAlignmentTrailingse agregaron en iOS 11
Cal Stephens

118

También puede usar el generador de interfaces si no desea hacer los ajustes en el código. Aquí dejé alinear el texto y también sangrarlo un poco:

UIButton en IB

No olvides que también puedes alinear una imagen en el botón:

ingrese la descripción de la imagen aquí


Esto me ayudó mucho, no puedo creer que no me di cuenta de que para eso eran esos controles.
Ethan Parker

Gracias, me ayudo. No pude encontrar inserciones de borde para el título del botón sin la ayuda de la indicación de flecha en sus imágenes de muestra.
Ashok

en Xcode 8.2.1 se trasladó a otro lugar ver mi respuesta a continuación
Dang

¿Cómo hacer eso programáticamente en Swift? ¿Quiero alinear la imagen a la derecha y el título en el lado izquierdo?
Visal Sambo

36

En 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.titleEdgeInsetses mejor que contentEdgeInsets, en caso de que no desee cambiar la posición de todo el contenido dentro del botón.



7

en xcode 8.2.1 en el generador de interfaces se mueve a:ingrese la descripción de la imagen aquí


5

Hay un pequeño error en el código de @DyingCactus. Aquí está la solución correcta para agregar un UILabel a un UIButton para alinear el texto del botón para controlar mejor el "título" del botón:

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 esto ayude....

Alabama


2

Para Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Esto puede ayudar si alguien lo necesita.


2

En Swift 5.0 y Xcode 10.2

Tienes dos formas de acercarte

1) enfoque directo

btn.contentHorizontalAlignment = .left

2) Ejemplo de SharedClass (escriba una vez y use todos los artículos)

Esta es tu clase compartida (así accedes a todas las propiedades de los componentes)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

//UIButton extension
extension UIButton {
    func btnProperties() {
        contentHorizontalAlignment = .left
    }
}

En su llamada de ViewController así

button.btnProperties()//This is your button

1

Tratar

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
Esto funcionó para mí, contentHorizontalAlignment no lo hizo, gracias.
danfordham
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.