需求:每行15个字,左右间距固定大小。根据宽度自动适配字体大小:即屏幕越宽,字号越大;屏幕小,则字号越小。
1.根据宽度计算字号方法
//根据不同屏幕宽度去适应字号大小
- (CGFloat)calcuateFontSizeFromWidth:(NSString *)text{
self.calculateTextView.frame = CGRectMake(0, -20, 0, 35.5);
self.calculateTextView.text = text;
CGFloat fontSize = 22;
CGFloat fixedWidth = MAXFLOAT;
CFTimeInterval startTimeInterval = CACurrentMediaTime();
while (fixedWidth>SCREEN_WIDTH-34*2) {
self.calculateTextView.font = [UIFont systemFontOfSize:fontSize];
fixedWidth = [self.calculateTextView sizeThatFits:CGSizeMake(MAXFLOAT, 50)].width;
fontSize = fontSize-0.5;
}
CMLogDebug(@"calcuateFontSizeFromWidth %.2f",CACurrentMediaTime() - startTimeInterval);
return MAX(fontSize, 0);
}
2.按每行15个字宽度调用,得出字号大小
CGFloat fontSize = [self calcuateFontSizeFromWidth:NSLocalizedString(@"onesentence_fifteenWord", nil)];
3.高度也需要计算,如果是固定高度,字号过大可能会导致字体显示不全
- (CGFloat)calcuateLineHeight{
self.calculateTextView.frame = CGRectMake(0, -20, SCREEN_WIDTH-34*2, MAXFLOAT);
self.calculateTextView.font = [UIFont systemFontOfSize:self.fontSize];
self.calculateTextView.text = NSLocalizedString(@"onesentence_fifteenWord", nil);
CGFloat height = [self.calculateTextView sizeThatFits:CGSizeMake(SCREEN_WIDTH-34*2, MAXFLOAT)].height;
return height;
}
总结:
1.iOS的TextView都需要自己实现,Android都是系统属性,羡慕的不行。
2.计算TextView的宽度和高度没有那个方法准确,只有在屏幕外写一个TextView用于计算,这样也不改变需要展示TextView的text。
有任何问题欢迎留言交流。