Je sais comment définir l'alignement vertical d'un bouton avec IB; voir ici . Mais je ne peux pas le faire par programme ... C’est l’une des choses que j’ai essayée:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 110, 130)];
[button setTitle:@"Align" forState:UIControlStateNormal];
button.backgroundColor = [UIColor whiteColor];
button.titleLabel.textColor = [UIColor grayColor];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
[self.view addSubview:button];
[button release];
J'ai aussi essayé des incrustations ...
Mais l'alignement ne changera pas.
Veuillez noter que je souhaite conserver le CustomStyle du bouton (je ne souhaite pas l'apparence par défaut).
Le problème était l'utilisation
button.titleLabel.textColor = [UIColor grayColor];
au lieu de
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
Ailleurs dans mon code, j'ai toujours du mal à aligner verticalement le texte, mais j'ai l'exemple de base, alors je devrais pouvoir obtenir la version plus compliquée si je l'examine plus en détail. Peut-être y a-t-il d'autres méthodes que j'utilise, comme button.titleLabel.textColor, qui empêchent l'alignement vertical de fonctionner ...
Mise à jour Le problème initial était en réalité dû au fait que mon bouton était trop court (hauteur du bouton).
Le mot husband
est dans le bouton, qui est actuellement aligné verticalement vers le bas. Mais comme la hauteur du bouton ne suffit pas, cela n’est pas évident. Même si les valeurs par défaut des encarts de titre et de contenu sont égales à zéro, il ne semble pas que le titre puisse être aligné contre le bas. Cela ressemble à environ 5 pixels pour moi. J'ai testé avec une police plus petite pour m'assurer que cela est correct.
Malheureusement, aligner verticalement le texte en haut ne semble rien changer ...
Vous pouvez aligner (horizontalement et verticalement) le texte du bouton de la manière suivante:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 70)];
button.backgroundColor = [UIColor whiteColor];
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom;
[button setTitle:@"Align" forState:UIControlStateNormal];
[self.container addSubview:button];
contentVerticalAlignment
est la voie à suivre. Peut-être que vous créez le bouton. Essaye ça:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(10, 10, 110, 130);
// rest of your code
// don't release button explicitly
Vous pouvez facilement manipuler l'étiquette de texte interne de UIButton. Voici comment vous pouvez le faire:
J'ai trouvé un meilleur moyen qui fonctionne pour moi. J'utilise une police personnalisée donc l'alignement a été légèrement modifié, comme dans lindon fox's answer ci-dessus.
À l'intérieur de votre sous-classe UIButton:
- (void)layoutSubviews {
[super layoutSubviews];
if (UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, self.titleEdgeInsets)) {
// adjust top, left bottom, and right to fit your needs
self.titleEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right);
}
}
Je suis d’accord avec les autres réponses selon lesquelles l’utilisation du paramètre contentVerticalAlignment
sur UIControlContentVerticalAlignmentCenter
est également une bonne idée.