29 votes

iOS UIButton avec UITextAlignmentLeft centrant toujours le texte ?

Problème :
Après avoir défini les paramètres d'un bouton titleEdgeInset y UITextAlignmentLeft le titre du bouton est toujours centré, et non aligné à gauche.

Détails :
J'ai un bouton de 200px de large utilisant un arrière-plan personnalisé avec une image sur la gauche. Comme je ne veux pas que le titre du bouton recouvre l'image, j'insère le titre à l'aide de la fonction titleEdgeInset=UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0); . Ainsi, la position x de l'étiquette du titre devrait commencer à 45px et se terminer à 200px. Je souhaite également que le titre du bouton soit aligné à gauche par rapport à l'image. textAlignment = UITextAlignmentLeft . Cependant, le texte du titre est toujours centré entre 45px et 200px, et non aligné à gauche.

Pourquoi ?

Voici le code correspondant :

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

81voto

rob mayoff Points 124153

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 mis button.contentHorizontalAlignment pas button.titleLabel.textAlignment . Mon résultat :

Screen shot of label

22voto

Vineesh TP Points 1658

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

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

Swift 4.0

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center

4voto

ZaBlanc Points 2396

Mettez une couleur de fond sur le titleLabel. Je parie qu'il est dimensionné pour s'adapter, donc l'alignement du texte n'aura pas d'importance. Il est seulement aussi long qu'il doit l'être. Ce que vous devez corriger, c'est la position de l'étiquette elle-même. Vous devrez peut-être étendre le UIButton et remplacer le layoutSubviews pour y parvenir. Je n'ai jamais vu un bouton dont l'étiquette n'était pas centrée.

2voto

Evana Points 1

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

yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

1voto

Riajur Rahman Points 1328

Swift 3

La propriété ContentHorizontalAlignment fait le travail. Merci

yourButton.contentHorizontalAlignment = .left

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X