ドキュメントによると、CTFramesetterSuggestFrameSizeWithConstraints ()
「文字列範囲に必要なフレームサイズを決定します」。
残念ながら、この関数によって返されるサイズは決して正確ではありません。これが私がやっていることです:
NSAttributedString *string = [[[NSAttributedString alloc] initWithString:@"lorem ipsum" attributes:nil] autorelease];
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef) string);
CGSize textSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(rect.size.width, CGFLOAT_MAX), NULL);
返されるサイズは常に正しい幅が計算されますが、高さは常に予想よりわずかに短くなります。
これは、このメソッドを使用する正しい方法ですか?
Core Text をレイアウトする他の方法はありますか?
この方法で問題が発生するのは私だけではないようです。https://devforums.apple.com/message/181450を参照してください。
編集: を使用して Quartz で同じ文字列を測定しsizeWithFont:
、属性付き文字列と Quartz の両方に同じフォントを指定しました。私が受け取った測定値は次のとおりです。
コア テキスト: 133.569336 x 16.592285
クォーツ:135.000000×31.000000