2011-01-01 5 views
2

J'applique une application de messagerie instantanée sur iOS. J'ai trouvé que la bibliothèque three20 a un TTStyledTextLabel qui fournit des fonctionnalités intéressantes comme l'affichage d'images et de liens URL. Cependant, je veux intégrer le TTStyledTextLabel dans une bulle de message (tout comme l'application sms fournie avec iphone), où j'ai besoin de l'étiquette pour ajuster sa taille en fonction de la longueur du texte. J'ai trouvé que TTStyledTextLabel peut ajuster sa hauteur en fonction de sa largeur, mais je ne sais pas comment la faire rétrécir horizontalement quand le texte est très court et ne peut pas remplir toute une ligne. Aucune suggestion?Comment ajuster la largeur de TTStyledTextLabel?

+0

Sur intérêt, puis-je demander à ce que vous utilisez pour la fonctionnalité de messagerie instantanée réelle? libpurple? – Pripyat

Répondre

3

je pense avoir une solution un peu mieux: je reçois le rootFrame du ttstyledtext et itérer sur ses frères et soeurs cadres pour trouver la largeur max.

Il fonctionne comme ceci:

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

Quel est le comportement de [label sizeToFit]; dans ce scénario ? Est-ce qu'il énonce tout à travers la largeur de l'écran? – user210504

0

J'ai essayé de le faire en passant de façon incrémentale le paramètre width à sizeToFit et en regardant la hauteur résultante pour donner des indices quant à savoir si la taille est correcte. Mais ce n'est pas une solution élégante

pour (int index = 100; indice < 320; index = indice + 30)

{x = label.width; si (étiquette.hauteur < 20) rupture;

}

+0

Je viens de vérifier à nouveau cette solution fonctionne – user210504

+0

Je pense que j'ai une solution légèrement meilleure: je reçois le rootFrame du ttstyledtext et itère sur ses cadres frères pour trouver la largeur maximale. –

Questions connexes