Question

Je suis une application IM mise en œuvre de iOS. Je trouve que la bibliothèque Three20 a une TTStyledTextLabel qui fournit des fonctionnalités intéressantes comme montrant des images et des liens url. Cependant, je veux intégrer le TTStyledTextLabel dans une bulle de message (comme l'application sms livré avec l'iPhone fait), où je dois l'étiquette pour ajuster sa taille en fonction de la longueur du texte. Je trouve que TTStyledTextLabel peut ajuster sa hauteur en fonction de sa largeur, mais je ne sais pas comment faire rétrécir horizontalement lorsque le texte est très court et ne peut pas remplir une ligne entière. Aucune suggestion?

Était-ce utile?

La solution

Je pense avoir une solution un peu mieux: je reçois le rootFrame du ttstyledtext et itérer sur ses cadres frères et soeurs 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);

Autres conseils

J'ai essayé de le faire en passant progressivement le paramètre de largeur en taille à sizeToFit et en regardant à la hauteur résultant de donner des indices quant à savoir si la taille est ok. Mais ce n'est pas une solution élégante

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

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

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top