2011-01-01 16 views
2

Ich implementiere eine IM App auf iOS. Ich fand, dass three20-Bibliothek ein TTStypedTextLabel hat, das coole Eigenschaften wie Zeigen von Bildern und URL-Links zur Verfügung stellt. Allerdings möchte ich das TTSstyledTextLabel in eine Nachrichtenblase einbetten (genau wie die SMS App, die mit dem iPhone ausgeliefert wird), wo ich das Etikett brauche, um seine Größe entsprechend der Textlänge anzupassen. Ich habe festgestellt, dass TTSstyledTextLabel seine Höhe entsprechend seiner Breite anpassen kann, aber ich weiß nicht, wie man es horizontal schrumpfen lässt, wenn der Text sehr kurz ist und nicht eine ganze Zeile ausfüllen kann. Irgendwelche Vorschläge?Wie wird die Breite von TTSstyledTextLabel angepasst?

+0

Aus Interesse, wenn ich fragen darf, was Sie für die eigentliche IM-Funktion verwenden? libpurple? – Pripyat

Antwort

3

Ich glaube, ich habe eine etwas bessere Lösung: Ich erhalte die rootFrame des ttstyledtext und iterieren seine Geschwister die maximale Breite finden einrahmt.

Es funktioniert wie folgt:

TTStyledTextLabel* label = [[TTStyledTextLabel alloc] init]; 
    label.text = [TTStyledText textFromXHTML:myTextToBeDisplayed]; 
    [label sizeToFit]; 
    CGFloat maxWidth = 0; 
    TTStyledFrame *f = label.text.rootFrame; 
    while (f) { 
     int w = f.x + f.width; 
     if (w > maxWidth) { 
      maxWidth = w; 
     } 
     f = f.nextFrame; 
    } 
    return CGSizeMake(maxWidth, label.height); 
+0

Was ist das Verhalten von [label sizeToFit]; In diesem Szenario ? Gibt es alles über die Bildschirmbreite aus? – user210504

0

Ich versuchte es, indem ich den width -Parameter in der Größe schrittweise an sizeToFit übergab und die resultierende Höhe betrachtete, um Hinweise zu geben, ob die Größe in Ordnung ist. Aber dies ist nicht eine elegante Lösung

for (int index = 100; Index < 320; index = index + 30)

{ label.width = x; if (label.height < 20) Bruch;

}

+0

Ich habe gerade überprüft, ob diese Lösung funktioniert – user210504

+0

Ich denke, ich habe eine etwas bessere Lösung: Ich bekomme den rootFrame des ttstyledtext und iterieren über seine Geschwister Frames, um die maximale Breite zu finden. –

Verwandte Themen