Wie mache ich das Textausrichtungszentrum von UIButton? IB verwenden

139

Ich kann den Titel von UIButton nicht mit IB als Zentrum festlegen. Mein Titel ist mehrzeilig.
Es gibt so
Geben Sie hier die Bildbeschreibung ein

Aber ich möchte so
Geben Sie hier die Bildbeschreibung ein

Ich habe hier Platz gegeben, aber das möchte ich nicht. Da es in einigen Fällen nicht genau ausgerichtet ist und ich weiß, dass es eine Eigenschaft von UILabel gibt, um die Ausrichtung festzulegen, möchte ich keinen Code dafür schreiben. Ich möchte nur alles von IB aus festlegen.

Vielen Dank

Inder Kumar Rathore
quelle
7
Kumar Rathor - versuchen Sie es mit Codeself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari
1
@Spark Ich weiß, wie man das per Code macht, aber ich wollte es mit 'IB' einstellen.
Inder Kumar Rathore
Ich weiß, Sie möchten es mit IB einstellen. Diese Eigenschaft ist jedoch nur über Code zugänglich.
Sagar R. Kothari
Es ist über IB zugänglich, indem es zugeordnet wird, aber wen interessiert das?
Youssef Moawad
@ YoussefSami Ja, Sie haben Recht stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

Antworten:

197

Damit erhalten Sie genau das, was Sie erwartet haben:

Ziel c:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Für iOS 6 oder höher ist es

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

wie in der Antwort von tyler53 erklärt

Schnell:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.x und höher

myButton.titleLabel?.textAlignment = .center
RGML
quelle
1
In späteren Versionen von iOS wurde es zu NSTextAlignment.
Sullivan
4
Da der Code nicht funktioniert, ist die beste Antwort @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier
8
In der Frage wird IB ausdrücklich erwähnt , wie im Interface Builder . Dies ist nicht die richtige Antwort, da eine Codierung erforderlich ist.
SwiftArchitect
1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black
'Center' wurde in 'center' umbenannt
ModusPwnens
106

Verwenden Sie die Zeile:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Dies sollte den Inhalt (horizontal) zentrieren.

Wenn Sie den Text innerhalb des Etiketts auch in die Mitte setzen möchten, verwenden Sie:

[labelOne setTextAlignment:UITextAlignmentCenter];

Wenn Sie IB verwenden möchten, habe ich hier ein kleines Beispiel, das in XCode 4 verlinkt ist, aber genügend Details enthalten sollte (beachten Sie auch, dass oben auf dem Eigenschaftenbildschirm die Registerkarte "Eigenschaften" angezeigt wird. In XCode finden Sie dieselben Registerkarten 3.x): Geben Sie hier die Bildbeschreibung ein

Joetjah
quelle
1
danke ... aber ich möchte es nicht über IB einstellen. :( das ist meine letzte Möglichkeit, das zu tun ...
Inder Kumar Rathore
1
@ Inder Kumar Rathore: Kein Problem. Um es in IB festzulegen, müssen Sie auf die Beschriftung klicken und dann im Attributinspektor die Ausrichtung auf "Mitte" setzen. In meinem IB (XCode 4) gibt es 3 Symbole, die die Ausrichtung des Texts anzeigen. Natürlich sollten Sie dann die mittlere auswählen.
Joetjah
Kannst du mir bitte den Screenshot schicken ... Ist das das Etikett des Buttons oder hast du das UILabel aus der Bibliothek gezogen? Ich nehme an, es ist UILabel nicht Button's Label
Inder Kumar Rathore
@Inder Kumar Rathore: Hey, schau dir den Screenshot an, den ich hinzugefügt habe. Ich habe in der Tat die Art der von Ihnen verwendeten Beschriftungen falsch verstanden. Ich habe immer noch an UILabel anstatt an den Text in UIButton gedacht. Der Screenshot zeigt, wie Sie den UIButton über IB ausrichten.
Joetjah
1
Ich würde nicht bearbeiten lassen, aber NSTextAlignmentCenter hat den Platz von UITextAlignmentCenter eingenommen. Sie bedeuten genau das Gleiche. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard
89

Lösung1

Sie können den Schlüsselpfad im Storyboard festlegen

Stellen Sie den Text auf Ihren mehrzeiligen Titel ein, z. B. hello + multiline

Sie müssen + drücken , um den Text in die nächste Zeile zu verschieben.

Geben Sie hier die Bildbeschreibung ein

Fügen Sie dann den Schlüsselpfad hinzu

titleLabel.textAlignmentals Numberund den Wert 1, 1Mittel NSTextAlignmentCenter
titleLabel.numberOfLineswie Numberund den Wert 0, 0bedeutet eine beliebige Anzahl von Leitungen

Geben Sie hier die Bildbeschreibung ein

Dies wird nicht auf IB / Xcode reflektiert, sondern zur Laufzeit in der Mitte sein (Gerät / Simulator)

Wenn Sie die Änderungen in Xcode sehen möchten, müssen Sie Folgendes tun: (Denken Sie daran, dass Sie diese Schritte überspringen können.)

  1. Unterklassifizieren Sie den UIButton, um die Schaltfläche gestaltbar zu machen:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Weisen Sie diese gestaltbare Unterklasse den Schaltflächen zu, die Sie ändern:

Zeigen, wie die Klasse der Schaltfläche mit dem Interface Builder geändert wird

  1. Wenn Sie es richtig gemacht haben, sehen Sie das visuelle Update in IB, wenn der Designables-Status "Aktuell" ist (was einige Sekunden dauern kann):

Vergleichen der Design- und Standardschaltfläche in Interface Builder



Lösung2

Wenn Sie den Code schreiben möchten, führen Sie den langen Vorgang aus

1.Erstellen Sie IBOutletfür die Schaltfläche
2.Schreiben Sie Code in viewDidLoad

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


Lösung3

In der neueren Version von xcode (meine ist xcode 6.1) haben wir den Titel "Eigenschaft"
Wählen Sie Attributeddann den Text aus und drücken Sie die mittlere Option unten

PS Der Text kam nicht mehrzeilig, dafür muss ich das einstellen

btn.titleLabel.numberOfLines = 0

Geben Sie hier die Bildbeschreibung ein

Inder Kumar Rathore
quelle
Für Lösung 3 können Sie einfach hinzufügen Line Breaking = Clip, es wird den Text in mehrzeilig verwandeln
finx
Lösung 3 hat ein Problem, zumindest mit Xcode 11.3.1: Wenn ich den Titel der Schaltfläche ändere, funktioniert es nicht. Wenn ich es benutzt habe btn.titleLabel.textAlignment, funktioniert es großartig.
Brian Hong
27

Für UIButton sollten Sie Folgendes verwenden: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Sirji
quelle
16

Für iOS 8 und Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

oder

btn.titleLabel.textAlignment = .Center

Eduardo Fiorezi
quelle
13

Für diejenigen unter Ihnen, die jetzt iOS 6 oder höher verwenden, ist UITextAlignmentCenter veraltet. Es ist jetzt NSTextAlignmentCenter

BEISPIEL: mylabel.textAlignment = NSTextAlignmentCenter;Funktioniert perfekt.

tyler53
quelle
11

Für Swift 4 xcode 9

myButton.contentHorizontalAlignment = .center
Shan Ye
quelle
Ich habe myButton.titleLabel? .NumberOfLines = 0 gesetzt und dadurch wurde die Beschriftung innerhalb der Schaltfläche zentriert. Daher habe ich versucht, herauszufinden, wie der Text innerhalb der Schaltfläche links ausgerichtet werden kann, und dies hat funktioniert, jedoch auf .left gesetzt.
Maxcodes
7

Angenommen, btn bezieht sich auf einen UIButton, können Sie in iOS 6 oder höher die folgende Anweisung verwenden, um eine mehrzeilige Beschriftung so zu ändern, dass sie horizontal zentriert wird:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
user1862723
quelle
4

UITextAlignmentCenter ist in iOS6 veraltet

Stattdessen können Sie diesen Code verwenden:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
quelle
Es gibt keine Eigenschaft für UIButton callee textAlignment.
Ravi
Es gibt keine solche Eigenschaft für UIButton in iOS
Jayprakash Dubey
Er meint button.titleLabel.textAlignment
OC Rickard
4

Für Swift 3.0

btn.titleLabel?.textAlignment = .center
Morten Gustafsson
quelle
4

Für Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Grzegorz R. Kulesza
quelle
benutze ein "?" in sender.titleLabel? stattdessen "??"
Владимир Ковальчук
3

Eigentlich können Sie es im Interface Builder tun.

Sie sollten Title auf "Attributed" setzen und dann die Ausrichtung der Mitte auswählen.

Alexander Danilov
quelle
Wenn es zugeordnet ist, können wir die Textfarbe, Schriftart usw. nicht über Storyboard festlegen.
Vineesh TP
3

Versuchen Sie es wie folgt:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Bobby
quelle
2

Sie können dies über das Storyboard tun. Wählen Sie Ihre Schaltfläche. Stellen Sie den Zeilenumbruch 'Zeilenumbruch' ein und setzen Sie Ihren Titel 'Einfach' auf 'Attributiert'. Wählen Sie 'Center Alignment'. Dieser Teil ist wichtig => Klicken Sie auf die Schaltfläche ... (Mehr). Und wählen Sie den Zeilenumbruchmodus auf "Zeichenumbruch".

Mustafa Karakuş
quelle
1

UIButton unterstützt setTextAlignment nicht. Sie müssen sich also für die Ausrichtung des Schaltflächentexts für setContentHorizontalAlignment entscheiden

Als Referenz

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
btmanikandan
quelle