В соответствии с документами 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);
Возвращаемый размер всегда имеет правильную ширину, но высота всегда немного короче, чем ожидается.
Это правильный способ использования этого метода?
Есть ли другой способ компоновки основного текста?
Кажется, я не единственный, кто сталкивается с проблемами этого метода. См. https://devforums.apple.com/message/181450.
Изменить:
Я измерил ту же строку с кварцем, используя sizeWithFont:
, снабдив тот же шрифт как атрибутной строке, так и Quartz. Вот полученные мной измерения:
Основной текст: 133.569336 x 16.592285
Кварц: 135.000000 x 31.000000