前言:这两天写项目,发现计算文本高度的地方有点问题,总是会多出一点来,作为有一点小洁癖的我来说,实在是有点蛋疼,所以就重新写了一个方法(废话有点多了),进入正题
先贴上GItHub下载地址:https://github.com/puwd/AdaptTextHeight
楼主自己封装了一个方法
- (CGFloat)calculateLabelHeightWithText:(NSString *)string width:(CGFloat)width fontSize:(int)fontSize
使用这个方法把需要计算的文本内容放进去,传一个宽度,在传一个字体大小就可以了
UILabel *label = [[UILabel alloc]init];
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:fontSize];
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text = string;
CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];
NSLog(@"size.height is %f",size.height);
return size.height;
使用label
的sizeThatFits
属性来计算文本的高
MAXFLOAT
是用来计算文本高度的,表示label
的高度是随label
的内容而变化的,不会因为label
的内容过长而现实不全(如果说高度指定,也可以用来计算宽度)
再来看看label.lineBreakMode
的各种样式
NSLineBreakByCharWrapping; 以字符为显示单位显示,后面部分省略不显示。
NSLineBreakByClipping; 剪切与文本宽度相同的内容长度,后半部分被删除。
NSLineBreakByTruncatingHead; 前面部分文字以……方式省略,显示尾部文字内容。
NSLineBreakByTruncatingMiddle; 中间的内容以……方式省略,显示头尾的文字内容。
NSLineBreakByTruncatingTail; 结尾部分的内容以……方式省略,显示头的文字内容。
NSLineBreakByWordWrapping; 以单词为显示单位显示,后面部分省略不显示。
贴上效果图
上面的文本使用
UILabel
展示的下面用的是
UITextVIew
展示
请注意
1.在使用该方法时,一定要让展示控件的宽度和字体大小与传过来的宽度和字体大小一致,否则内容也是显示不完整的
2.如果你是使用的UITextView
展示,请在计算出来的高度上 +8;(因为UITextView
默认是距离顶部8个像素点开始加载的(我是这样理解的),如果不加8的话,会出现底部的文字只能看到一半的效果)
3.如果你选择用UILabel
展示请设置label.numberOfLines = 0;