我正在尝试计算字体大小以使文本适合2行(具有可变的字体大小)。
在storyboard标签中有固定的字体大小,自动换行设置为NSLineBreakByWordWrapping
。
如果第一个单词长于行宽,我的代码不起作用(适用于iOS 8)。
E.g。对于iOS 7.1中的“Verylongline 45”,boundingRectWithSize:
将为行计算rect
(w:50,h:60):
Verylongl
ine
45
它保持宽度范围,但无论如何都会在第一个单词之后进行自动换行。在iOS 8中,它返回文本的矩形(w:50,h:40):
Verylongl
ine 45
因为或者差异代码来计算可接受的字体大小不起作用。 iOS 8可以在2行中放入更大的字体,忽略换行设置。
此代码是一种类别方法,用于调整标签的字体大小以使其适合2行。适用于iOS 7.1,不适用于iOS 8.0
for (int i = maxSize; i>minSize; i--) {
UIFont *font = [UIFont fontWithName:self.font.fontName size:(CGFloat)i];
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:NSLineBreakByWordWrapping];
CGRect rect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName: font, NSParagraphStyleAttributeName: style} context:nil];
if (rect.size.height <= self.frame.size.height) {
self.font = [UIFont fontWithName:self.font.fontName size:(CGFloat)i];
break;
}
}
你知道如何让它在iOS 8中运行吗?