¿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];
Madan Mohan
fuente

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);
Tieme
fuente
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í

n8tr
fuente
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
Vincent
fuente
13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
bhavik
fuente
13

Swift 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Mohammad Zaid Pathan
fuente
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.

Gabriel
fuente
7

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

Dang
fuente
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

Al-Noor Ladhani
fuente
2

Para Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Esto puede ayudar si alguien lo necesita.

Suraj Sonawane
fuente
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
iOS
fuente
1

Tratar

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
Gev
fuente
1
Esto funcionó para mí, contentHorizontalAlignment no lo hizo, gracias.
danfordham