2011-08-02 9 views
3

NSStringを指定されたスペースにどれだけレンダリングできるかを判断する方法はありますか?NSStringの描画/サイズメソッドで描画される部分文字列を決定します

NSStringのsizeWithFontメソッド(sizeWithFont:constrainedToSize:lineBreakModeなど)はすべて知っています。文字列が長すぎて収まらない場合は、文字列のどの部分がレンダリングできたかは分かりません。例えば

、Iは

NSString *testString = @"The brown dog"; 

を有し、私が呼び出した場合:

[testString sizeWithFont:[UIFont systemFontOfSize:17] constrainedtoSize:CGSizeMake(20, 20) lineBreakMode:UILineBreakModeWordWrap]; 

IはCGSize = {20,20}を取り戻すことができます。それは文字列が少なくとも全体のサイズを取ったと私に伝えますが、それが終わったか、どれくらいフィットすることができたかはわかりません。 「ブラウン」だけがフィットすることができれば、私はそれを知りたいと思います。

これを行うには、いくつかのCore Foundationメソッドが必要でしょうか?

答えて

1

切り捨てるかどうかを判断する方法の1つは、制約矩形内に非常に大きな高さを指定することです。戻った高さがラベルの高さよりも高い場合は、ラベルの高さが切り捨てられることがわかります。このような何か:

// myLabel is a UILabel* 
    CGSize labelSize = myLabel.frame.size; 
    labelSize.height = 9999; 
    CGSize newSize = [newLabel sizeWithFont:[UIFont systemFontOfSize:17.0] 
          constrainedToSize:labelSize 
           lineBreakMode:UILineBreakModeWordWrap]; 
    if(newSize.height > labelSize.height) { 
     // Whoops, too big! 
    } 

それが切り捨てられるかどうかを教えてくれますが、それはどのくらいのだろうあなたを教えてくれません。私がそれをすると考えることができるのは、これをループで行い、それが適合するまで毎回最後から単語を削除することだけです。

+0

申し訳ありません、申し訳ありませんが、これまでに返信したはずです。あなたが言ったことの最初の部分は、私が後にしたものにはあまり当てはまらないものですが、ループの提案は私たちが最終的に行ったことに近いものです。基本的には、まず大きなサイズから始め、多かれ少なかれバイナリ検索を行って、一番長い文字列を見つけました。 – DougW

関連する問題