2012-05-10 20 views
2

私はカスタムUIViewクラスを持っていて、- (void)drawRect:(CGRect)rectにいくつかのテキストを描きたいと思います。しかし、私はテキストブロックがシステムフォントサイズ12で最大幅84pxに制限されることを望みます。テキストがこの幅を超えるなら、私はそれをカットし、最後の3文字を "..."にします。与えられたフォントと矩形の文字列長を取得する

例:

"This is some text" // length okay 
"Information co..." // length truncated 

私はNSStringさん- (CGSize)sizeWithFont:(UIFont *)fontを通じて与えられたフォントで文字列の幅を計算することができることを知っているが、どのように私は84px幅の最大文字列の長さを得ることができますか?

+1

のための信頼できる手がかり。あなたはおそらく6 'X​​'文字と同じ幅で10 '私'文字を言うことに合うかもしれません –

+1

[このブログ](http://joshjustice.wordpress.com/2010/12/20/monospace-fonts-on- iOS /)では、モノスペースフォントはiOSではモノスペースではないと言っています:/ /あなたは使用したいすべての文字列に対して 'sizeWithFont:'を使う方が良いでしょう。 –

+0

方法が必要です。 「ウイラーベル」はそれをやっている。正しい長さのバイナリ検索を行うことができました。長さが適合するまでループして再試行しましたが、それは私には醜いようです... – user826955

答えて

4

私が正しくあなたの状況を理解しています場合は、メソッド
- (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakModeを使用し、改行モードにUILineBreakModeTailTruncationを使用する必要があります。

+0

それは信じられないほど簡単でした。ありがとう! – user826955

+0

'drawAtPoint:forWidth:withFont:lineBreakMode:'はiOS 7.0では非推奨です。 "代わりに' drawInRect:withAttributes: 'を使用してください。" @iJordanはあなたがどのように知っていますか? – Cong

0

特定の幅とフォントに対して許可される最大文字数を知りたいと思います。残念ながら、それは知ることは不可能です。なぜなら、さまざまな文字サイズがあるからです( 'm'は 'l'よりも広い)。

何ができることは呼び出しです:

[@"Your text here" sizeWithFont:yourFont minFontSize:smallestFontSizeYouWillAccept actualFontSize:&pointerToYourFontSizeFloatValue forWidth:yourWidthConstraint lineBreakMode:yourLineBreakMode]; 

(あなたがそれへのポインタを渡されたので)これはあなたのfontSizeのfloat値を変えてしまうと、それは今はなくても使用することができる最大のフォントサイズになります改行。あなたが与えたフロートを使って、新しいフォントを作成してフロートにサイズを設定することができます。

希望すると便利です。

0

この方法では、あなたのケースで役に立ちます。 - (CGSize)drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode

その問題はiOSの等幅フォント(もしあれば)多くがないですあなたの場合

関連する問題