我正在尝试计算出适合定义矩形的字符串的最大字体大小。现在我发现了许多其他说明如何做到这一点的帖子,包括:
调整 CATextLayer 的大小以适应 iOS 上的文本
NSLineBreakByWordWrapping 会中断哪些字符?
现在这些很棒,告诉我如何获得最大的字体大小。然而,当使用“sizeWithFont:constrainedToSize:lineBreakMode:”方法和换行符(UILineBreakModeWordWrap 或 NSLineBreakByWordWrapping)时,它实际上是在多行中拆分大字。
UILineBreakModeWordWrap(或 NSLineBreakByWordWrapping)不是意味着单词不会“拆分”超过一行。我很高兴多个单词出现在多行中,但是我不希望一个单词被分成两个。如果 UILineBreakModeWordWrap 不能做到这一点,还有别的可以吗?
下面是我用来确定最大可能字体大小的代码:(文本为@"australia")
-(UIFont *)GetFontSizeForText:(NSString *)text inRect:(CGRect)rect {
BOOL notFit = YES;
CGSize textSize;
CGFloat tmpFontSize = TEMPLATE_DEFAULT_FONT_SIZE;
UIFont *tmpFont;
CGSize maxSize = CGSizeMake(rect.size.width, MAXFLOAT);
while (notFit) {
tmpFont = [UIFont fontWithName:TEMPLATE_DEFAULT_FONT_NAME size:tmpFontSize];
textSize = [text sizeWithFont:tmpFont constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];
if (textSize.height > rect.size.height) {
tmpFontSize -= 1.0;
if (tmpFontSize < 2.0) {
break;
}
} else {
notFit = NO;
}
}
return tmpFont;
}
下面是一个图片链接,显示了使用上述函数计算字体大小时会发生什么。“黄色”框是最大的尺寸。紫色框是使用计算出的字体大小渲染的实际 CATextLayer。这些框上方的“AUSTRALIA”文本是一个UILabel,我将其与界面生成器以相同的字体大小放在此处。
http://www.connstructstudios.com.au/externalimages/multilines.png