크기를 정의하려면 CTFramesetterSuggestFrameSizeWithConstraints 함수를 사용하고, 속성을 갖는 문자열은 필요하지만 크기는 작아야하며 폭은 constrainSize.width 매개 변수보다 큽니다. . 여기 내 코드 :CTFramesetterSuggestFrameSizeWithConstraints는 결과를 제한 크기로 제한하지 않습니다.
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
내가 뭘 잘못하고 있니?
을 참조하십시오. 그러나 저에게는 적합하지 않습니다. 메서드에서받는 높이는 lineHeight 값은 필요하지만 높이는 줄 간격 값과 다릅니다. –