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

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

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


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

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

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



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


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


2

Pour Swift 2.0:

emailBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left  

Cela peut aider si quelqu'un en a besoin.


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

1

Essayer

button.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

1
Cela a fonctionné pour moi, contentHorizontalAlignment n'a pas fonctionné, merci.
danfordham
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.