2011-01-01 3 views
2

私はiOS上にIMアプリケーションを実装しています。私は、画像とURLのリンクを表示するようなクールな機能を提供するTTStyledTextLabelがthree20ライブラリにあることを発見しました。しかし、私はメッセージのバブルにTTStyledTextLabelを埋め込みたいと思っています(iphoneのSMSのように)、テキストの長さに合わせてサイズを調整する必要があります。 TTStyledTextLabelは幅に応じて高さを調整できますが、テキストが非常に短く、行全体を埋めることができない場合、水平に縮小する方法はわかりません。助言がありますか?TTStyledTextLabelの幅を調整する方法は?

+0

、私はあなたが実際にIM機能のために使用しているものを求めることができますか? libpurple? – Pripyat

答えて

3

私は少しよりよい解決策を持っていると思う:私はttstyledtextのrootFrameを取得し、その兄弟が最大幅を見つけるために、フレームを反復します。

それは次のように動作します。興味のあるうち

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

[label sizeToFit]の動作は何ですか?このシナリオでは?それは、画面の幅を越えてすべてをレイアウトしていますか? – user210504

0

sizeToFitにwidthパラメータをインクリメンタルに渡して、結果の高さを調べて、サイズが大丈夫かどうかを確認しました。しかし、これはのためのエレガントな解決策

ない(;指数< 320; int型のインデックス= 100インデックス=指数+ 30)

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

}

+0

私はもう一度この解決策を確認しました。 – user210504

+0

私は少し良い解決策があると思います:私はttstyledtextのrootFrameを取得し、最大幅を見つけるために兄弟フレームを反復処理します。 –

関連する問題