2012-05-21 4 views
0

크기를 정의하려면 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 

내가 뭘 잘못하고 있니?

답변

0

나는 비슷한 문제가 있었는데, 그 해결책은 높이 문제에 대해서는 this post에서 발견되었습니다. kCTParagraphStyleSpecifierLineSpacingAdjustment를 지정해야합니다.

+0

을 참조하십시오. 그러나 저에게는 적합하지 않습니다. 메서드에서받는 높이는 lineHeight 값은 필요하지만 높이는 줄 간격 값과 다릅니다. –

0

결과 크기를 반환하기 전에 result.width 매개 변수를 제약 조건 크기의 너비로 설정하십시오.

+0

잘못된 텍스트 높이의 문제는 해결되지 않습니다. –

관련 문제