2014-01-13 7 views
6

Ich versuche, Ellipse Text auf mehrere Zeilen innerhalb eines Rechtecks ​​zu zeichnen.Mehrzeiliger Text wird nicht ellipsentiert

Für NSLineBreakByTruncatingTail, die Dokumentation wird

Die Linie angezeigt wird, so dass der Anfang in dem Behälter paßt und der fehlende Text am Ende der Leitung wird durch einen Auslassungs Glyphe angezeigt. Obwohl dieser Modus für mehrzeiligen Text funktioniert, wird er häufiger für Einzeilentext verwendet.

aber mit diesem Modus erhalte ich nur eine einzige Zeile:

With NSLineBreakByTruncatingTail

jedoch mit NSLineBreakByWordWrapping, bekomme ich nicht ein Auslassungszeichen für überlangen Text:

With NSLineBreakByWordWrapping

Beide Bilder verwenden den gleichen Code unten (roter Hintergrund ist das Textzeichnungsrechteck) und natürlich die gleiche Rechteckgröße, also sollten 2 Zeilen d sein Endlich fit.

NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
paragraphStyle.lineBreakMode = <<see above>>; 
paragraphStyle.alignment = NSTextAlignmentNatural; 
NSDictionary* drawingAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
            [UIFont fontWithName:@"HelveticaNeue" size:36], 
            NSFontAttributeName, 
            paragraphStyle, 
            NSParagraphStyleAttributeName, 
            nil]; 

const CGRect rect = CGRectMake(...); 
[@"I do not get ellipsized in any way" drawInRect:rect withAttributes:drawingAttributes]; 

Gibt es eine Möglichkeit mit mehrzeiligen Rendering zu kombinieren ellipsizing, wie die Dokumentation sagt? Mit einem UILabel müsste ich nur die Anzahl der Zeilen auf etwas anderes als 1 setzen, aber was ist mit Text-Rendering über Code?

+0

Ich glaube Multiline bedeutet ... eine Bildlaufleiste. Und Sie wollen 2 Zeilen Textfeld. So können Sie zwei TextField erstellen, ein normales anderes abgeschnittenes Tail. –

+0

Es geht nicht um eine UI-Steuerung, sondern um Text-Rendering über Code! – AndiDog

+0

Ja, aber der Text wird in einigen UI gerendert werden. Und die EINZIGE UI wird auf beide Arten angezeigt. Wenn Sie zwei UIs haben, dann kann dies getan werden. oder wahrscheinlich müssen Sie eine benutzerdefinierte UI mit dieser Anforderung erstellen. –

Antwort

1

Ich verstehe nicht, warum Sie NSMutableParagraphStyle und drawInRect verwenden, wahrscheinlich brauche ich mehr Informationen über den Kontext, den Sie versuchen zu arbeiten.

Aber mit dieser einfachen Technik:

UILabel *label = [[UILabel alloc] initWithFrame:(CGRect){0,0,300,100}]; 
label.numberOfLines = 0; 
label.backgroundColor = [UIColor redColor]; 
label.center = self.view.center; 
label.font = [UIFont fontWithName:@"HelveticaNeue" size:36]; 
label.textAlignment = NSTextAlignmentNatural; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
label.text = @"I do not get ellipsized in any way"; 

[self.view addSubview:label]; 

Sie das folgende Ergebnis sehen: enter image description here

ist Mein Vorschlag von drawInRect in diesem Fall loszuwerden.