大家好,谢谢你的帮助。
我正在尝试计算出适合定义矩形的字符串的最大字体大小。现在我发现了许多其他帖子,说明如何做到这一点,包括:
Resizing UILabel to fit with Word Wrap
Resize CATextLayer to fit text on iOS
Which characters does NSLineBreakByWordWrapping break on?
现在这些很棒,告诉我如何获得最大的字体大小。但是,当使用方法“sizeWithFont:constrainedToSize:lineBreakMode:”并使用换行符(UILineBreakModeWordWrap或NSLineBreakByWordWrapping)时,它实际上是在多行中拆分大字。
UILineBreakModeWordWrap(或NSLineBreakByWordWrapping)是不是意味着单词不会在一行以上“拆分”。我很高兴多行上有多个单词,但是我不喜欢我想要一个单词分成两个。如果UILineBreakModeWordWrap无法做到这一点,还有其他什么可以吗?
以下是我用来确定最大字体大小的代码:(文字是@“澳大利亚”)
-(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
再次感谢。
答案 0 :(得分:2)
“包装发生在单词边界,除非单词本身不适合单行。”
因此,如果单词太长就可以拆分。
要解决此问题,您可以将字符串分隔为单词,对每个组件使用- (CGSize)sizeWithFont:(UIFont *)font;
并检查宽度是否低于最大值。