2013-04-12 4 views
10

私は現在のNSStringのサイズを取得するためにNSStringにemojisが含まれている場合、NSStringのサイズを取得する方法は?

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode 

を使用しています。しかし、その文字列にemojisが含まれている場合、返されるサイズが正しくないように、絵文字自体のサイズを考慮するのではなく、リテラルのUnicode文字のサイズを計算しているようです。

emoji文字が表示されるので、文字列のサイズを正しく取得するにはどうすればよいですか?

+2

おそらく、具体的な(短い)文字列、計算されたサイズ、予想されるサイズを与えることができます。 –

+1

私はさまざまな絵文字とローマ字、異なるフォントを混在させてみましたが、サイズは常に正しいです...おそらく、文字列を含むには小さすぎる 'constrainedToSize:'パラメータに問題があります。 。 – Guillaume

+1

デフォルトでは、フォントサイズに関係なく、すべての絵文字が固定サイズで表示され、NSStringとUIFontはフォントサイズを完全に無視します。絵文字は、iOS上では常に約20ピクセル(非網膜)に描画されるため、文字列の残りの部分では正しく測定されません。 –

答えて

2

NSStringは絵文字を表していません。それは文字列を表しているため、sizeWithFontはその文字列のみを扱います。

私が使用します。

CGRect labelFrame = label.frame; 
labelFrame.size = [label sizeThatFits:CGSizeMake(100, 9999)]; 
[label setFrame:labelFrame]; 

または

//Alternatively 
[label sizeToFit]; 

ベアを念頭に置いてsizeToFitsizeThatFits:メソッドを呼び出すようにするために、ちょうどいい高さ、sizeThatFitsにラベルを設定するという点で:高速です、目にははるかに簡単です。

+1

私は失望して申し訳ありませんが、私のスタックのhttp:// stackoverflowに記載されているように、これは問題を解決しないことがわかります。 com/questions/19537354/emojis-messing-with-obj-cs-sizewithfont-math –

1

私はしばらくの間この同じことに苦労し、私のためにはうまくいかなかった受け入れられた答えを含む複数の解決策を試みました。 NSAttributedStringメソッドを使用してテキストをNSAttributed Stringとして作成し、文字列のサイズを取得するためにboundingRectWithSize:options:context:を使用して解決しました。

NSString *text = //some text 
CGFloat maxSize = //text size constraints 

NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text 
                     attributes:@{NSFontAttributeName : font 
                        }]; 

CGRect boundingRect = [attributedString boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 
CGSize fitSize = boundingRect.size; 
関連する問題