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