Die letzte Zeile von NSAttributedString wurde in UILabel nicht gerendert

8

Ich habe Text, der HTML-Formatierung enthält, die ich in einer Ansicht rendern möchte. Zurzeit verwende ich NSAtributedString , um den Text in UILabel anzuzeigen.

Ich erhalte die attributierte Zeichenfolge wie folgt:

%Vor%

und weisen Sie es dann der attributedText -Eigenschaft meines Labels zu. Die Eigenschaft self.descriptionText ist ein NSString , das einfache HTML-Markups wie p -Tags oder span -Tags mit Inline-Stilen enthalten kann. Die Technik zum Umbrechen der Zeichenfolge in einem HTML-Dokument wurde in einem anderen StackOverflow-Post gefunden.

Die UILabel ist auf Zeilen = 0 und Zeilenumbrüche = Zeilenumbruch gesetzt. Das Verhalten, das ich sehe, ist, dass die Beschriftung richtig wächst, um die ganze Schnur unterzubringen, aber die letzte Linie der Schnur wird nie gerendert, egal wie lang die Schnur ist.

Hier ist eine Bildschirmaufnahme mit zwei Labels. Die obere Beschriftung (mit einem gelben Hintergrund) enthält meine HTML-Zeichenfolge. Sie können sehen, dass das Label eine Größe von 3 Textzeilen hat, aber nur zwei gerendert werden und der Rest abgeschnitten wird. Der zweiten Beschriftung (mit einem roten Hintergrund) wurde eine einfache Zeichenkette zugewiesen, die der Text-Eigenschaft zugewiesen ist. Sie zeichnet nur gut.

Die im Beispielbild verwendete HTML-Zeichenfolge enthält den folgenden Text:

%Vor%

Eine akzeptable Antwort würde erklären, wie ich verhindern kann, dass die letzte Zeile abgeschnitten wird, oder eine einfache alternative Methode zum Rendern von HTML-Text in einer Ansicht bereitstellen. Danke.

    
Andrew H 26.03.2014, 07:56
quelle

3 Antworten

10

Ok, ich habe es herausgefunden. Es ist keine naheliegende Lösung, aber ich habe nach der Entdeckung eine Gesichtspalme gemacht.

Das Problem ist, dass dem p -Tag ein Rand und / oder Padding zugewiesen wird, wodurch der Text außerhalb der Grenzen von UILabel verschoben wird. Ich weiß nicht, warum es nicht berücksichtigt wird, wenn die Größe der Zeichenfolge berechnet wird, aber es ist mir egal.

Die Lösung bestand darin, p {margin:0; padding:0;} zu dem style-Tag hinzuzufügen, das ich vor der HTML-Zeichenfolge hatte. Jetzt wird der gesamte String innerhalb des UILabel korrekt gezeichnet.

    
Andrew H 26.03.2014, 18:22
quelle
5

Gerade ist das auch gelaufen. Anscheinend hat UILabel Schwierigkeiten, die richtige Größe zu berechnen, wenn ein attributedText mit dem Attribut NSParagraphStyleAttributeName angezeigt wird.

Ich habe mein Problem gelöst, indem ich dieses Attribut aus meinem NSMutableAttributedString entfernte, bevor ich es meinem Label wie folgt zuordnete:

%Vor%

Der Effekt ist der gleiche, aber er fühlt sich ein wenig aufgeräumter an, als wenn man ein Inline-CSS vorlegt.

    
Bart Vandendriessche 14.08.2014 15:48
quelle
0

Ich hatte das gleiche Problem mit dem neuen iOS 11.

Meine Lösung war, eine css Zeilenhöhe einzufügen. Obwohl es die angezeigte Zeilenhöhe nicht beeinflusst, hat es das Problem gelöst und jetzt werden alle Zeilen angezeigt

tobidude 15.09.2017 14:27
quelle