Comment définir le titre de UIButton comme alignement à gauche?

472

Je dois afficher l'adresse e-mail du côté gauche d'un UIButton, mais elle est positionnée au centre.

Existe-t-il un moyen de définir l'alignement sur le côté gauche d'un UIButton?

Voici mon code actuel:

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
la source

Réponses:

1568

Définissez le contenu Alignement horizontal:

emailBtn.contentHorizontalAlignment = .left;

Vous pouvez également ajuster le contenu en encart gauche, sinon le texte touchera la bordure gauche:

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

// Swift 3 and up:
emailBtn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);
Attache-moi
la source
44
N'oubliez pas que vous pouvez également définir ces deux propriétés à partir d'Interface Builder.
Mihai Damian
1
donc c'était le numéro 9000 de ma part, merci, réponse utile
Logic
6
Nous sommes trop paresseux pour rechercher la documentation. Que ferions-nous sans SO!
Kedar Paranjape
3
Va montrer que SO est mieux documenté que le document Apple.
GeneCode
1
UIControlContentHorizontalAlignmentLeadinget UIControlContentHorizontalAlignmentTrailingont été ajoutés dans iOS 11
Cal Stephens
118

Vous pouvez également utiliser le générateur d'interface si vous ne souhaitez pas effectuer les ajustements dans le code. Ici, je suis parti aligner le texte et aussi le mettre en retrait:

UIButton dans IB

N'oubliez pas que vous pouvez également aligner une image dans le bouton:

entrez la description de l'image ici

n8tr
la source
Cela m'a aidé une tonne, je ne peux pas croire que je ne savais pas à quoi servaient ces contrôles.
Ethan Parker
Merci, ça m'a aidé. Je n'ai pas été en mesure de trouver des encarts de bord pour le titre du bouton sans l'aide de l'indication de la flèche dans vos exemples d'images.
Ashok
dans xcode 8.2.1, il a déménagé à un autre endroit, voir ma réponse ci
dang
Comment faire cela par programmation en swift? Je veux aligner l'image à droite et le titre à gauche ???
Visal Sambo
36

Dans Swift 3+:

button.contentHorizontalAlignment = .left
Vincent
la source
13
UIButton *btn;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
bhavik
la source
13

Swift 4+

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Mohammad Zaid Pathan
la source
9

L'utilisation emailBtn.titleEdgeInsetsest meilleure que contentEdgeInsetsdans le cas où vous ne souhaitez pas modifier la position du contenu dans son intégralité.

Gabriel
la source
7

dans xcode 8.2.1 dans le générateur d'interface, il se déplace vers:entrez la description de l'image ici

dang
la source
5

Il y a une petite erreur dans le code de @DyingCactus. Voici la bonne solution pour ajouter un UILabel à un UIButton pour aligner le texte du bouton pour mieux contrôler le titre du bouton:

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

J'espère que cela t'aides....

Al

Al-Noor Ladhani
la source
2

Pour Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Cela peut aider si quelqu'un en a besoin.

Suraj Sonawane
la source
2

Dans Swift 5.0 et Xcode 10.2

Vous avez deux façons d'approcher

1) Approche directe

btn.contentHorizontalAlignment = .left

2) Exemple de SharedClass (écrire une fois et utiliser tous les articles)

Ceci est votre classe partagée (comme celle-ci, vous accédez à toutes les propriétés des composants)

import UIKit

class SharedClass: NSObject {

    static let sharedInstance = SharedClass()

    private override init() {

    }
}

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

Dans votre appel ViewController comme celui-ci

button.btnProperties()//This is your button
iOS
la source
1

Essayer

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
Gev
la source
1
Cela a fonctionné pour moi, contentHorizontalAlignment n'a pas fonctionné, merci.
danfordham