web-dev-qa-db-fra.com

uIButton iOS avec UITextAlignmentLeft centrant toujours le texte?

Problème:
Après avoir défini les variables titleEdgeInset et UITextAlignmentLeft d'un bouton, son titre est toujours centré et non aligné à gauche.

Détails:
J'ai un bouton de 200 pixels de large utilisant un arrière-plan personnalisé avec une image à gauche. Puisque je ne veux pas que le titre du bouton recouvre l’image, j’insère le titre à l’aide de titleEdgeInset=UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0);. Cela devrait faire en sorte que la position x de l'étiquette de titre commence à 45px et se termine à 200px. Je veux aussi que le titre du bouton soit aligné à gauche sur l'image, donc je règle aussi textAlignment = UITextAlignmentLeft. Cependant, le texte du titre est toujours centré entre 45px et 200px et n'est pas aligné à gauche.

Pourquoi?

Voici le code pertinent:

button.titleEdgeInsets = UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0);
button.titleLabel.textAlignment = UITextAlignmentLeft;
[button setTitle:@"X"];
29
memmons

Mon code de test:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 200, 72);
UIImage *image = [UIImage imageNamed:@"rob.png"];
[button setImage:image forState:UIControlStateNormal];
button.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[button setTitle:@"Hello" forState:UIControlStateNormal];
button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.view addSubview:button];

Notez que j'ai défini button.contentHorizontalAlignment, pas button.titleLabel.textAlignment. Mon résultat:

Screen shot of label

80
rob mayoff

définissez la propriété contentHorizontalAlignment pour le bouton, cela fonctionnera.

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

Swift 4.0

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center
22
Vineesh TP

Mettez une couleur de fond sur le label de titre. Je parie que sa taille est adaptée à la taille, l'alignement du texte n'aura donc aucune importance. C'est seulement aussi longtemps que cela doit être. Ce que vous devez corriger est la position de l'étiquette elle-même. Vous devrez peut-être étendre le UIButton et substituer layoutSubviews pour bien faire les choses. Je n'ai jamais vu un bouton avec autre chose qu'une étiquette centrée.

4
ZaBlanc

Définissez la propriété contentHorizontalAlignment pour un bouton:

yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
2
Evana

Swift 3

Définissez la propriété contentHorizontalAlignment pour le travail. Merci

yourButton.contentHorizontalAlignment = .left
1
Riajur Rahman

Remplacez simplement le créateur du bouton et essayez de définir la propriété contentHorizontalAlignment dans le créateur

-(UIButton *)yourButton {
      [_yourButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];

    return _yourButton;
}
0
Mostafa Elbutch