0

CTFramesetterSuggestFrameSizeWithConstraints 関数を使用してサイズを定義します。属性付きの文字列が必要ですが、取得した高さが本来よりも小さく、幅が ConstrainSize.width パラメーターよりも大きくなっています。これが私のコードです:

CTTextAlignment textAlignment = kCTLeftTextAlignment;
CTLineBreakMode lineBreakMode = kCTLineBreakByWordWrapping;

CTParagraphStyleSetting paragraphSettings[] = {
    {
        kCTParagraphStyleSpecifierAlignment,
        sizeof(textAlignment),
        &textAlignment
    },
    {
        kCTParagraphStyleSpecifierLineBreakMode,
        sizeof(lineBreakMode),
        &lineBreakMode
    }  
};

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(paragraphSettings, sizeof(paragraphSettings) / sizeof(paragraphSettings[0]));

NSMutableAttributedString *attrString = [[[NSMutableAttributedString alloc] initWithString:[authorString stringByAppendingFormat:@" %@", bodyText]] autorelease];

CTFontRef ctfontAuthor = CTFontCreateWithName((CFStringRef)@"Arial-BoldMT", 14.0, NULL);
CTFontRef ctfontBody = CTFontCreateWithName((CFStringRef)@"Arial", 14.0, NULL);
[attrString addAttribute:(NSString *)kCTParagraphStyleAttributeName value:(id)paragraphStyle range:NSMakeRange(0, [attrString length])];
[attrString addAttribute:(NSString *)kCTFontAttributeName value:(id)ctfontAuthor range:NSMakeRange(0, [authorString length] + 1)];
[attrString addAttribute:(NSString *)kCTFontAttributeName value:(id)ctfontBody range:NSMakeRange([authorString length] + 1, [bodyText length])];
CFRelease(ctfontAuthor);
CFRelease(ctfontBody);
CFRelease(paragraphStyle);

CFRange fitRange;
CGSize result = CGSizeZero;
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)attrString);
result = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, [authorString length] + [bodyText length] + 1), NULL, size, &fitRange);
CFRelease(framesetter);
return result;// result is the value I need to be constrained to size (229.0, MAXFLOAT) but sometimes it is 231 and some more

私は何を間違っていますか?

4

3 に答える 3

0

結果サイズを返す前に、result.widthパラメーターを制約サイズからの幅に設定してみてください。

于 2013-01-10T11:26:50.693 に答える
0

私は同様の問題を抱えていましたが、この投稿から解決策を見つけました(少なくとも高さの問題については)。kCTParagraphStyleSpecifierLineSpacingAdjustment を指定する必要があります。

于 2012-07-13T13:56:56.857 に答える
0

私もこのケースで実行し、それを解決して、すべてのケースで機能するカテゴリを作成しました。高さとしてゼロを使用する場合、高さを任意の高さに制限しません。この問題のカテゴリを作成しました。これは、すべての場合に役立ちます。動的テキストと画像が一緒にレンダリングされた iOS UITableView を参照してください (NSAttributedString + 画像)

于 2014-03-09T02:42:12.783 に答える