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"];
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:
définissez la propriété contentHorizontalAlignment pour le bouton, cela fonctionnera.
YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Swift 4.0
YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center
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.
Définissez la propriété contentHorizontalAlignment pour un bouton:
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Swift 3
Définissez la propriété contentHorizontalAlignment pour le travail. Merci
yourButton.contentHorizontalAlignment = .left
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;
}