2013-05-30 6 views
9

Ich habe eine Anforderung, ein UILabel mit Text anzuzeigen, der zwei verschiedene Stile (verschiedene Farben, Teile des Textes fett) hat. Dies wird mit der attributedText-Eigenschaft einfach gelöst.UILabel attributiertText mit mehreren Zeilenumbruch-Modi

Mein Problem ist, dass der Text möglicherweise nicht länger ist als das, was ich in mein Etikett passen kann. Bei Verwendung von Klartext funktioniert alles so, wie ich es möchte. Der Text wird so umbrochen, dass er der Anzahl der Zeilen im Label entspricht, und der Tail wird abgeschnitten, wenn der Text länger ist als auf dem Etikett angezeigt werden kann.

Wenn ich zu attributedText wechseln kann, kann ich nur zwischen Tail Truncation und Word Wrapping wählen. Wenn der Schwanz abgeschnitten werden soll, rendert das Label nur eine einzige Linie mit dem abgeschnittenen Schwanz (obwohl es 10 Zeilen passen könnte). Wenn ich den Zeilenumbruch wähle, wird das Endstück nicht abgeschnitten, aber die Zeilen, die nicht in das Etikett passen, werden einfach nicht angezeigt.

Meine Inhaltszeichenfolge enthält keine Zeilenumbrüche, es ist einfach eine lange Zeichenfolge.

+0

Haben Sie darüber nachgedacht, Apple einen Fehler zuzufügen? – manicaesar

+0

Konnten Sie das lösen? –

+0

siehe - https://Stackoverflow.com/a/23554815/294884 und auch ** Pikachu ** 's Antwort hier unten – Fattie

Antwort

0

Sie können eine NSParagraphStyle mit einer beliebigen lineBreakMode Sie bitte, und wenden Sie es auf die Zeichenfolge mit NSParagraphStyleAttributeName. Ich weiß nicht, ob alle Werte von NSLineBreakMode unterstützt werden, aber ich habe keinen Grund zu glauben, dass sie nicht sind.

+1

Ich tat dies und versuchte, mehrere Stile darauf einzustellen, aber der zweite Stil wurde immer ignoriert. Das habe ich ausprobiert: self.paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail; –

+0

Diese Stile sind keine Masken; Du kannst sie nicht so kombinieren. –

4

Sie nur Möglichkeit, dies zu arbeiten, ist nicht einen Absatzstil festlegen.

8

ich Abschneiden verpasst, wenn ich LineSpacing gesetzt, aber alles, was ich hatte, war hinzufügen paragraphstyle linebreak

NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init]; 
[paragrahStyle setLineSpacing:1.5]; 
[paragrahStyle setLineBreakMode:NSLineBreakByTruncatingTail]; 
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@"Long string that truncates"]; 
[attributedText addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [attributedText length])]; 

self.label.attributedText = attributedText; 
1

versuchen Sie dies:

[_text drawWithRect: _textRect Optionen: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine Attribute: Attribute Kontext: Null];

+0

Ich denke, das ist es. siehe auch: https://stackoverflow.com/a/23554815/294884 es ist schade, dass Sie dies nur mit einer attributierten Zeichenfolge erreichen können. – Fattie

Verwandte Themen