很多時(shí)候我們?cè)诩虞dtable的時(shí)候侄旬,需要計(jì)算文本高度拷获,但是計(jì)算會(huì)有誤差淆九;
省略文字描述纹安,直接eg:
str = @"這個(gè)文本有4個(gè)空格??? ,寬度定義為320,sizeToFit,font14.場(chǎng)景:這段文字4行多2個(gè)字,因?yàn)檫@4個(gè)空格,我們計(jì)算只能得到3行的高度";
CGRect textRect = [str boundingRectWithSize:CGSizeMake(kScreenWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14.f]} context:nil];
//當(dāng)文本中 空格? 剛好影響到換行的時(shí)候,計(jì)算高度會(huì)嚴(yán)重偏差,所以我們?cè)谟?jì)算的時(shí)候這樣做:
添加NSString+Calculate方法,對(duì)你需要計(jì)算高度的文本進(jìn)行處理,利用NSString的替換字符串方法(stringByReplacingOccurrencesOfString:@" " withString:@"k"),把文本中的空格替換成一個(gè)字母,然后再計(jì)算.
CGRect textRect = [[str calculateText] boundingRectWithSize:CGSizeMake(kScreenWidth,
MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont
systemFontOfSize:14.f]} context:nil];
//[str calculateText] 是你自己寫(xiě)的類目方法;替換的字母有沒(méi)有講究我沒(méi)去深入了解
最后一步:對(duì)文本計(jì)算的高度取整+1
CGFloat cellHeight = ceil(textRect.size.height) + 1;