390 Stimmen

Wie fügt man mehrzeiligen Text zu einer UIButton hinzu?

Ich habe den folgenden Code...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

...die Idee ist, dass ich mehrzeiligen Text für die Schaltfläche haben kann, aber der Text ist immer durch das backgroundImage der UIButton verdeckt. Ein Logging-Aufruf, um die Unteransichten der Schaltfläche anzuzeigen, zeigt, dass das UILabel hinzugefügt wurde, aber der Text selbst ist nicht zu sehen. Ist dies ein Fehler in UIButton oder mache ich etwas falsch?

701voto

jessecurry Punkte 21963

Für iOS 6 und höher verwenden Sie Folgendes, um mehrere Zeilen zuzulassen:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
// you probably want to center it
button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to 
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

Für iOS 5 und darunter verwenden Sie Folgendes, um mehrere Zeilen zuzulassen:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
// you probably want to center it
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

2017, für iOS9 vorwärts ,

Im Allgemeinen sollten Sie nur diese beiden Dinge tun:

  1. wählen. "Zugeschriebener Text"
  2. Wählen Sie im Popup "Zeilenumbruch" die Option "Wortumbruch"

157voto

Adam Waite Punkte 19683

Die ausgewählte Antwort ist richtig, aber wenn Sie es vorziehen, diese Art von Dingen in Interface Builder zu tun, können Sie dies tun:

pic

61voto

user5440039 Punkte 615

Wenn Sie eine Schaltfläche hinzufügen möchten, bei der der Titel mit mehreren Zeilen zentriert ist, legen Sie die Einstellungen für die Schaltfläche im Interface Builder fest:

[ here ]

54voto

NiKKi Punkte 3276

Für IOS 6 :

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

Als

UILineBreakModeWordWrap and UITextAlignmentCenter

sind ab IOS 6 veraltet.

32voto

baudot Punkte 1591

Um den Vorschlag von Roger Nolan noch einmal aufzugreifen, aber mit explizitem Code, ist dies die allgemeine Lösung:

button.titleLabel?.numberOfLines = 0

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X