Comment créer le centre d'alignement du texte d'UIButton? Utiliser IB

140

Je ne peux pas définir le titre d'UIButton en utilisant IB comme centre. Mon titre est multi-lignes.
C'est donner comme celui-ci
entrez la description de l'image ici

Mais je veux comme celui-ci
entrez la description de l'image ici

J'ai donné de l'espace là-dedans mais je ne veux pas faire ça. Comme il n'est pas aligné exactement dans certains cas et je sais qu'il existe une propriété de UILabel pour définir l'alignement, mais je ne veux pas écrire de code pour cela .. je veux juste tout définir à partir de IB.

Merci

Inder Kumar Rathore
la source
7
Kumar Rathor - essai par codeself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari
1
@Spark Je sais comment faire cela par code mais ce que je voulais, c'est le définir en utilisant 'IB'.
Inder Kumar Rathore
Je sais, vous aimeriez le configurer en utilisant IB. Mais une telle propriété n'est accessible que via le code.
Sagar R. Kothari
Il est accessible via IB en le rendant attribué mais qui s'en soucie!
Youssef Moawad
@YoussefSami oui vous avez raison stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

Réponses:

197

Cela fera exactement ce que vous attendiez:

Objectif c:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Pour iOS 6 ou supérieur, c'est

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

comme expliqué dans la réponse de tyler53

Rapide:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.x et supérieur

myButton.titleLabel?.textAlignment = .center
RGML
la source
1
Il est devenu NSTextAlignment dans les versions ultérieures d'iOS.
Sullivan
4
Ce code ne fonctionne pas, la meilleure réponse est @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier
8
La question mentionne explicitement IB , comme dans Interface Builder . Ce n'est pas la bonne réponse, car elle nécessite un codage.
SwiftArchitect
1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black
'Center' a été renommé 'center'
ModusPwnens
106

Utilisez la ligne:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Cela devrait centrer le contenu (horizontalement).

Et si vous souhaitez également placer le texte à l'intérieur de l'étiquette au centre, utilisez:

[labelOne setTextAlignment:UITextAlignmentCenter];

Si vous souhaitez utiliser IB, j'ai un petit exemple ici qui est lié à XCode 4 mais qui devrait fournir suffisamment de détails (attention également, en haut de cet écran de propriétés, il affiche l'onglet de propriété. Vous pouvez trouver les mêmes onglets dans XCode 3.x): entrez la description de l'image ici

Joetjah
la source
1
merci ... mais je ne veux pas le configurer via IB. :( c'est ma dernière option pour faire ça ...
Inder Kumar Rathore
1
@Inder Kumar Rathore: Pas de problème. Pour le définir dans IB, vous devez cliquer sur l'étiquette, puis dans l'inspecteur d'attributs, régler Alignement sur "Centre". Dans mon IB (XCode 4), il a 3 icônes montrant l'alignement du texte. Évidemment, vous devriez alors choisir celui du milieu.
Joetjah
pouvez-vous s'il vous plaît m'envoyer la capture d'écran ... Est-ce l'étiquette du bouton ou vous avez dragué le UILabel de la bibliothèque ??? Je suppose que c'est UILabel pas l'étiquette du bouton
Inder Kumar Rathore
@Inder Kumar Rathore: Hé, regardez la capture d'écran que j'ai ajoutée. Je me suis en effet trompé sur le type d'étiquettes que vous utilisez, je pensais toujours à UILabel au lieu du texte dans UIButton. La capture d'écran montre comment s'aligner sur l'UIButton via IB.
Joetjah
1
Ne me laisserait pas modifier, mais NSTextAlignmentCenter a remplacé UITextAlignmentCenter. Ils signifient exactement la même chose tho. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard
90

Solution1

Vous pouvez définir le chemin clé dans le storyboard

Définissez le texte sur votre titre multiligne, par exemple hello + multiline

Vous devez appuyer sur + pour déplacer le texte sur la ligne suivante.

entrez la description de l'image ici

Ensuite, ajoutez le chemin clé

titleLabel.textAlignmentas Numberet valeur 1, 1signifie NSTextAlignmentCenter
titleLabel.numberOfLinesas Numberet valeur 0, 0signifie n'importe quel nombre de lignes

entrez la description de l'image ici

Cela ne sera pas reflété sur IB / Xcode, mais sera au centre au moment de l'exécution (appareil / simulateur)

Si vous souhaitez voir les modifications sur Xcode, vous devez procéder comme suit: (rappelez-vous que vous pouvez ignorer ces étapes)

  1. Sous-classez l'UIButton pour rendre le bouton concevable:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Attribuez cette sous-classe personnalisable aux boutons que vous modifiez:

Montrer comment changer la classe du bouton à l'aide d'Interface Builder

  1. Si c'est bien fait, vous verrez la mise à jour visuelle dans IB lorsque l'état Designables est "À jour" (ce qui peut prendre plusieurs secondes):

Comparaison du bouton designable et par défaut dans Interface Builder



Solution2

Si vous voulez écrire le code, faites le long processus

1.Créer IBOutletpour le bouton
2.Écrire le code dans viewDidLoad

btn.titleLabel.textAlignment = .Center
btn.titleLabel.numberOfLines = 0


Solution3

Dans la version plus récente de xcode (le mien est xcode 6.1), nous avons le titre attribué à la propriété
Sélectionnez Attributedpuis sélectionnez le texte et appuyez sur l'option centrale ci-dessous

PS Le texte ne venait pas multiligne pour cela je dois définir le

btn.titleLabel.numberOfLines = 0

entrez la description de l'image ici

Inder Kumar Rathore
la source
Pour la solution 3, vous pouvez simplement ajouter Line Breaking = Clip, cela transformera le texte en multiligne
finx
La solution 3 a un problème, au moins avec Xcode 11.3.1: lorsque je change le titre du bouton, cela ne fonctionne pas. quand je l'ai utilisé btn.titleLabel.textAlignment, ça marche très bien.
Brian Hong le
27

Pour UIButton, vous devez utiliser: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Sirji
la source
16

Pour ios 8 et Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

ou

btn.titleLabel.textAlignment = .Center

Eduardo Fiorezi
la source
13

Pour ceux d'entre vous qui utilisent maintenant iOS 6 ou supérieur, UITextAlignmentCenter est obsolète. C'est maintenant NSTextAlignmentCenter

EXEMPLE: mylabel.textAlignment = NSTextAlignmentCenter;Fonctionne parfaitement.

tyler53
la source
12

Pour swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
Shan Ye
la source
J'ai défini myButton.titleLabel? .NumberOfLines = 0 et cela a provoqué le centrage de l'étiquette dans le bouton.J'essayais donc de comprendre comment aligner le texte à gauche dans le bouton et cela a fonctionné, en le définissant sur .gauche cependant.
maxcodes
7

En supposant que btn fait référence à un UIButton, pour modifier une légende sur plusieurs lignes pour qu'elle soit centrée horizontalement, vous pouvez utiliser l'instruction suivante dans iOS 6 ou version ultérieure:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
user1862723
la source
4

UITextAlignmentCenter est obsolète dans iOS6

Au lieu de cela, vous pouvez utiliser ce code:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
la source
Il n'existe aucune propriété pour UIButton callee textAlignment.
Ravi
Il n'y a pas une telle propriété pour UIButton dans iOS
Jayprakash Dubey
Il veut dire button.titleLabel.textAlignment
OC Rickard
4

Pour Swift 3.0

btn.titleLabel?.textAlignment = .center
Morten Gustafsson
la source
4

Pour Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Grzegorz R. Kulesza
la source
utilisez un "?" dans sender.titleLabel? au lieu "??"
Владимир Ковальчук
3

En fait, vous pouvez le faire dans le générateur d'interface.

Vous devez définir le titre sur "Attribué", puis choisir l'alignement au centre.

Alexandre Danilov
la source
S'il est attribué, nous ne pouvons pas définir la couleur du texte, la police, etc. via Storyboard.
Vineesh TP
3

Essayez comme ceci:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Policier
la source
2

Vous pouvez le faire à partir du storyboard. Sélectionnez votre bouton. Définissez le saut de ligne «Word Wrap», définissez votre titre «Plain» sur «Attribué». Sélectionnez «Alignement au centre». Cette partie est importante => Cliquez sur le bouton ... (Plus). Et sélectionnez le mode de saut de ligne sur 'Character Wrap'.

Mustafa Karakuş
la source
1

UIButton ne prend pas en charge setTextAlignment. Vous devez donc utiliser setContentHorizontalAlignment pour l'alignement du texte des boutons

Pour votre référence

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
btmanikandan
la source