Я создал метод категории в одной точке.Вы в основном кормите его прямоугольником, и он возвращает подходящий шрифт.Может быть, вы можете получить что-то из следующего грубого примера:
- (UIFont *)fontSizeForRect:(CGRect)rect withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode minFontSize:(CGFloat)minFontSize
{
CGFloat fontSize = [font pointSize];
UIFont *tempFont = [UIFont fontWithName:[font fontName] size:[font pointSize]];
CGFloat acceptableFontSize = fontSize;
while (fontSize > minFontSize)
{
UIFont *testFont = [UIFont fontWithName:[tempFont fontName] size:fontSize];
CGSize sizeWithTestFont = [self sizeWithFont:testFont constrainedToSize:CGSizeMake(rect.size.width, 99999.0) lineBreakMode:lineBreakMode];
if (sizeWithTestFont.height > rect.size.height)
fontSize -= 1.0f; //Shrink the font size by a point
else
{
//Fits. Use it.
acceptableFontSize = fontSize;
break;
}
}
return [UIFont fontWithName:[font fontName] size:acceptableFontSize];
}