Ich versuche, eine zu UIButton
erstellen, deren titleLabel zwei Textzeilen enthält. Dies ist der Code, den ich verwende:
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
[titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleButton.titleLabel.numberOfLines = 2;
[self addSubview:titleButton];
Wenn ich das versuche, erscheint der Text nur in einer Zeile. Es scheint, dass der einzige Weg, um mehr als eine Textzeile zu erreichen UIButton.titleLabel
, das Festlegen numberOfLines=0
und Verwenden ist UILineBreakModeWordWrap
. Dies garantiert jedoch nicht, dass der Text genau zwei Zeilen umfasst.
Die Verwendung einer Ebene UILabel
funktioniert jedoch:
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[self addSubview:titleLabel];
Weiß jemand, wie man die UIButton
Arbeit mit zwei Zeilen macht? Ist die einzige Lösung, eine separate Lösung für UILabel
den Text zu erstellen und ihn als Unteransicht der Schaltfläche hinzuzufügen?
objective-c
ios
uibutton
uilabel
Vermarkter
quelle
quelle
numberOfLines=0
und verwendenUILineBreakModeWordWrap
, können Sie mehrere Zeilen erhalten. Das Problem dabei ist, dass es mehr als zwei Zeilen geben kann, wenn der Text zu lang ist. Ich möchte genau zwei Lones mit einem Elipsen am Ende der zweiten Zeile (wenn der Text zu lang ist).Antworten:
Aktualisierte Antwort für neuere iOS-Versionen
Da dies die akzeptierte Antwort ist, wurde hier die Antwort von @ Sean hinzugefügt:
Legen Sie diese Eigenschaften im titleLabel Ihrer Schaltfläche fest.
Swift 3 und 4:
Ursprüngliche Antwort für eine ältere Version von iOS
Wenn Sie 2 Textzeilen darüber haben möchten
UIButton
, sollten Sie darüber eine hinzufügenUIlabel
, die genau das tut.Aktualisiert für die Interface Builder-Lösung
Die Antwort von @Borut Tomazin wurde hinzugefügt, um eine vollständigere Antwort zu erhalten. Dieser Teil wurde erneut aktualisiert, da die Antwort von @Borut Tomazin verbessert wurde.
Sie können dies viel einfacher tun, ohne dass Code erforderlich ist. Setzen
Line Break
Sie im Interface Builder auf UIButton aufWord Wrap
. Dann können Sie mehrere Titelzeilen einfügen. Drücken Sie einfach dieOption + Return
Tasten, um eine neue Zeile zu erstellen. Sie müssen dies auch dem benutzerdefinierten Laufzeitattribut in Interface Builder hinzufügen:quelle
UILineBreakMode
sind veraltet, verwenden SieNSLineBreakMode
stattdessenSie müssen dem UIButton kein UILabel hinzufügen. Das sind nur zusätzliche Objekte und Arbeit.
Legen Sie diese Eigenschaften im titleLabel Ihrer Schaltfläche fest.
Schnell:
quelle
intrinsicContentSize
, wodurch immer noch eine Höhe zurückgegeben wird, die nur einer Textzeile entspricht. Ich habe es behoben, indem ich die Schaltflächen überschrieben habe, auf dieintrinsicContentSize
ich die Höhe eingestellt habe[self.titleLabel sizeThatFits(CGSizeMake(self.titleLabel.frame.size.width, CGFLOAT_MAX)].height
.Sie können dies viel einfacher tun, ohne dass Code erforderlich ist. Setzen
Line Break
Sie im Interface Builder auf UIButton aufWord Wrap
. Dann können Sie mehrere Titelzeilen einfügen. Drücken Sie einfach dieOption + Return
Tasten, um eine neue Zeile zu erstellen. Sie müssen dies auch dem benutzerdefinierten Laufzeitattribut in Interface Builder hinzufügen:So einfach ist das. Ich hoffe es hilft...
quelle
titleLabel.textAlignment
benutzerdefinierte Laufzeitattribut im Interface Builder hinzufügen und auf Number = 1 (NSTextAlignmentCenter-Wert) setzen.quelle
NSString
Innere nicht teilensetTitle
. `WordWrapping`` erledigt das für Sie!Um die Notwendigkeit, Code zu bearbeiten und damit Ihre Ansicht zu unterordnen, vollständig zu vermeiden, können Sie in Xcode5 und höher dem Vorschlag von Borut Tomazin folgen:
und dann können Sie in den benutzerdefinierten Laufzeitattributen hinzufügen
Schlüsselpfad:
titleLabel.textAlignment
Typ:
Number
Wert:
1
Hinweis: Dies ist möglicherweise nicht vollständig "zukunftssicher", da wir die
UITextAlignmentCenter
Konstante in ihren numerischen Wert übersetzen (und diese Konstante kann sich ändern, wenn neue iOS-Versionen veröffentlicht werden), aber es scheint in naher Zukunft sicher zu sein.quelle
Sie können den erforderlichen Wert direkt in Storyboard ändern. Wählen Sie die Schaltfläche aus, rufen Sie den Identitätsinspektor auf und fügen Sie im Abschnitt "Benutzerdefinierte Laufzeitattribute" das folgende Schlüssel-Wert-Paar hinzu:
quelle