前言:這兩天寫項目,發(fā)現(xiàn)計算文本高度的地方有點問題命锄,總是會多出一點來券时,作為有一點小潔癖的我來說,實在是有點蛋疼黄选,所以就重新寫了一個方法(廢話有點多了)蝇摸,進入正題
先貼上GItHub下載地址:https://github.com/puwd/AdaptTextHeight
樓主自己封裝了一個方法
- (CGFloat)calculateLabelHeightWithText:(NSString *)string width:(CGFloat)width fontSize:(int)fontSize
使用這個方法把需要計算的文本內(nèi)容放進去婶肩,傳一個寬度,在傳一個字體大小就可以了
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
的內(nèi)容而變化的律歼,不會因為label
的內(nèi)容過長而現(xiàn)實不全(如果說高度指定,也可以用來計算寬度)
再來看看label.lineBreakMode
的各種樣式
NSLineBreakByCharWrapping; 以字符為顯示單位顯示啡专,后面部分省略不顯示险毁。
NSLineBreakByClipping; 剪切與文本寬度相同的內(nèi)容長度,后半部分被刪除们童。
NSLineBreakByTruncatingHead; 前面部分文字以……方式省略畔况,顯示尾部文字內(nèi)容。
NSLineBreakByTruncatingMiddle; 中間的內(nèi)容以……方式省略慧库,顯示頭尾的文字內(nèi)容跷跪。
NSLineBreakByTruncatingTail; 結(jié)尾部分的內(nèi)容以……方式省略,顯示頭的文字內(nèi)容齐板。
NSLineBreakByWordWrapping; 以單詞為顯示單位顯示吵瞻,后面部分省略不顯示。
貼上效果圖
上面的文本使用
UILabel
展示的下面用的是
UITextVIew
展示
請注意
1.在使用該方法時甘磨,一定要讓展示控件的寬度和字體大小與傳過來的寬度和字體大小一致橡羞,否則內(nèi)容也是顯示不完整的
2.如果你是使用的UITextView
展示,請在計算出來的高度上 +8;(因為UITextView
默認是距離頂部8個像素點開始加載的(我是這樣理解的),如果不加8的話济舆,會出現(xiàn)底部的文字只能看到一半的效果)
3.如果你選擇用UILabel
展示請設(shè)置label.numberOfLines = 0;