Domanda

sto implementando un app IM su iOS. Ho scoperto che Three20 biblioteca ha un TTStyledTextLabel che fornisce funzioni interessanti come mostrando immagini e collegamenti URL. Tuttavia voglio incorporare il TTStyledTextLabel in una bolla messaggio (proprio come l'applicazione sms fornito con iPhone lo fa), dove ho bisogno l'etichetta per regolarne le dimensioni in base alla lunghezza del testo. Ho trovato che TTStyledTextLabel può regolare l'altezza secondo la sua larghezza, ma non so come farlo ridurre in orizzontale quando il testo è molto breve e non può riempire una intera linea. Eventuali suggerimenti?

È stato utile?

Soluzione

Credo di avere una soluzione un po 'meglio: ho la rootFrame del ttstyledtext e iterare sulle sue strutture di pari livello per trovare la larghezza massima

.

Funziona in questo modo:

    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);

Altri suggerimenti

Ho provato a farlo a modo incrementale passando il parametro di larghezza per dimensioni a sizeToFit e guardando l'altezza risultante per dare spunti in termini di se la dimensione è ok. Ma questa non è una soluzione elegante

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

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

}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top