Come rendere il centro di allineamento del testo di UIButton? Utilizzando IB


140

Non riesco a impostare il titolo di UIButton usando IB come centro. Il mio titolo è multi linea.
Sta dando come questo
inserisci qui la descrizione dell'immagine

Ma voglio così
inserisci qui la descrizione dell'immagine

Ho dato spazio in questo, ma non voglio farlo. Dato che non è allineato esattamente per alcuni casi e so che esiste una proprietà di UILabel per impostare l'allineamento ma non voglio scrivere un codice per quello .. voglio solo impostare tutto da IB.

Grazie


7
Kumar Rathor - prova con il codiceself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari

1
@Spark So come farlo tramite il codice ma quello che volevo è impostarlo usando 'IB'.
Inder Kumar Rathore il

Lo so, ti piacerebbe impostarlo usando IB. Ma tale proprietà è accessibile solo tramite codice.
Sagar R. Kothari,

È accessibile tramite IB facendolo attribuire, ma a chi importa!
Youssef Moawad,

Risposte:


197

Questo renderà esattamente quello che ti aspettavi:

Objective-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Per iOS 6 o versioni successive è

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

come spiegato nella risposta di tyler53

Swift:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.xe versioni successive

myButton.titleLabel?.textAlignment = .center

1
È diventato NSTextAlignment nelle versioni successive di iOS.
Sullivan,

4
Questo codice non funziona, la risposta migliore è @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier,

8
La domanda menziona esplicitamente IB , come in Interface Builder . Questa non è la risposta corretta, in quanto richiede la codifica.
SwiftArchitect,

1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black

'Center' è stato rinominato 'center'
ModusPwnens il

106

Usa la linea:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Questo dovrebbe centrare il contenuto (in orizzontale).

E se vuoi impostare anche il testo all'interno dell'etichetta al centro, usa:

[labelOne setTextAlignment:UITextAlignmentCenter];

Se vuoi usare IB, ho un piccolo esempio qui che è collegato in XCode 4 ma dovrebbe fornire abbastanza dettagli (anche attenzione, in cima a quella schermata delle proprietà mostra la scheda delle proprietà. Puoi trovare le stesse schede in XCode 3.x): inserisci qui la descrizione dell'immagine


1
grazie ... ma non voglio impostarlo tramite IB. :( questa è la mia ultima opzione per farlo ...
Inder Kumar Rathore,

1
@Inder Kumar Rathore: nessun problema. Per impostarlo in IB, è necessario fare clic sull'etichetta, quindi in Impostazioni attributi, impostare Allineamento su "Centro". Nel mio IB (XCode 4), ha 3 icone che mostrano l'allineamento del testo. Ovviamente, dovresti scegliere quello centrale allora.
Joetjah,

puoi per favore inviarmi la schermata ... È questa l'etichetta del pulsante o hai trascinato l'UILabel dalla libreria ??? Suppongo che UILabel non sia l'etichetta di Button
Inder Kumar Rathore,

@Inder Kumar Rathore: Ehi, guarda lo screenshot che ho aggiunto. Ho davvero confuso il tipo di etichette che usi, stavo ancora pensando a UILabel invece che al testo in UIButton. Lo screenshot mostra come allinearlo su UIButton tramite IB.
Joetjah,

1
Non mi lascerebbe modificare, ma NSTextAlignmentCenter ha preso il posto di UITextAlignmentCenter. Significano esattamente la stessa cosa. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard,

90

Soluzione 1

Puoi impostare il percorso chiave nello storyboard

Imposta il testo sul titolo multilinea, ad es. hello + multiline

Devi premere + per spostare il testo alla riga successiva.

inserisci qui la descrizione dell'immagine

Quindi aggiungere il percorso chiave

titleLabel.textAlignmentas Numbere value 1, 1significa NSTextAlignmentCenter
titleLabel.numberOfLinesas Numbere value 0, 0indica un numero qualsiasi di righe

inserisci qui la descrizione dell'immagine

Questo non si rifletterà su IB / Xcode, ma sarà al centro in fase di esecuzione (dispositivo / simulatore)

Se vuoi vedere le modifiche su Xcode devi fare quanto segue: (ricorda che puoi saltare questi passaggi)

  1. Sottoclasse il pulsante UIB per rendere il pulsante designabile:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Assegna questa sottoclasse progettabile ai pulsanti che stai modificando:

Mostra come cambiare la classe del pulsante usando Interface Builder

  1. Se fatto bene, vedrai l'aggiornamento visivo in IB quando lo stato di Designables è "Aggiornato" (che può richiedere alcuni secondi):

Confronto tra il pulsante designabile e quello predefinito in Interface Builder



Solution2

Se vuoi scrivere il codice, fai il lungo processo

1.Crea IBOutletper il pulsante
2.Scrivi il codice in viewDidLoad

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


Solution3

Nella versione più recente di xcode (il mio è xcode 6.1) abbiamo il titolo attribuito alla proprietà
Selezionare Attributedquindi selezionare il testo e premere l'opzione centro in basso

PS Il testo non stava diventando multilinea per quello che devo impostare

btn.titleLabel.numberOfLines = 0

inserisci qui la descrizione dell'immagine


Per la soluzione 3, puoi semplicemente aggiungere Line Breaking = Clip, trasformerà il testo in multilinea
finx,

La soluzione 3 ha problemi, almeno con Xcode 11.3.1: quando cambio il titolo del pulsante, non funziona. quando l'ho usato btn.titleLabel.textAlignment, funziona benissimo.
Brian Hong

27

Per UIButton dovresti usare: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];

16

Per iOS 8 e Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

o

btn.titleLabel.textAlignment = .Center


13

Per quelli di voi che ora utilizzano iOS 6 o versioni successive, UITextAlignmentCenter è stato deprecato. Ora è NSTextAlignmentCenter

ESEMPIO: mylabel.textAlignment = NSTextAlignmentCenter;funziona perfettamente.


12

Per swift 4, xcode 9

myButton.contentHorizontalAlignment = .center

Ho impostato myButton.titleLabel? .NumberOfLines = 0 e ha causato la centratura dell'etichetta all'interno del pulsante, quindi stavo cercando di capire come allineare il testo a sinistra all'interno del pulsante e questo ha funzionato, impostandolo su .left.
maxcodes

7

Supponendo che btn si riferisca a un UIButton, per modificare una didascalia multilinea da centrare orizzontalmente, puoi usare la seguente istruzione in iOS 6 o versioni successive:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;

4

UITextAlignmentCenter è obsoleto in iOS6

Invece puoi usare questo codice:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;


Non esiste alcuna proprietà per UIButton callee textAlignment.
Ravi,

Non esiste tale proprietà per UIButton in iOS
Jayprakash Dubey,

Intende button.titleLabel.textAlignment
OC Rickard il



3

In realtà puoi farlo nel generatore di interfacce.

È necessario impostare il titolo su "Attribuito" e quindi scegliere l'allineamento centrale.


Se viene attribuito, non possiamo impostare il colore del testo, il carattere ecc. Tramite Storyboard.
Vineesh TP

3

Prova in questo modo:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

2

Puoi farlo dallo storyboard. Seleziona il tuo pulsante. Imposta l'interruzione di riga "A capo automatico", imposta il titolo "Semplice" su "Attribuito". Seleziona "Allineamento al centro". Questa parte è importante => Fare clic sul pulsante (Altro). E seleziona la modalità di interruzione di riga su "A capo automatico".


1

UIButton non supporterà setTextAlignment. Quindi devi andare con setContentHorizontalAlignment per l'allineamento del testo dei pulsanti

Per tua referenza

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.