今天工作中遇到了需要根据文字数,自动换行,同时还得保持布局的正确.
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CellData* data=[CellData tableDataWithDict:_GetedNetData[indexPath.row ]];
switch (data.CellId) {
case 0:
{//第一种布局 纯文字
CGSize mysize=CGSizeMake(SCREEN_WIDTH-105, 200000);
UIFont *font=[UIFont systemFontOfSize:17];
CGSize labelSize=[data.ContentText sizeWithFont:font constrainedToSize:mysize lineBreakMode:UILineBreakModeWordWrap];
CGFloat utlHeigh=labelSize.height+70;
if (utlHeigh<150) {
return 150;
}
return utlHeigh;
break;
}
case 1:
//第二种布局
break;
case 2:
//第三种布局
break;
case 3:
//第四种布局
break;
default:
break;
}
return 400;
}
CGSize mysize=CGSizeMake(SCREEN_WIDTH-105, 200000);
UIFont *font=[UIFont systemFontOfSize:17];
CGSize labelSize=[data.ContentText sizeWithFont:font constrainedToSize:mysize lineBreakMode:UILineBreakModeWordWrap];
上面这段代码也就是获取到了现在的 Label的 宽高.
但是需要有一些细节需要注意,不然你会发现返回的高度不是你期望的:
1.
CGSize mysize=CGSizeMake(SCREEN_WIDTH-105, 200000);
<span style="white-space:pre"> </span>上面的参数,第一个是宽度,是指你UILabel显示的最大宽度,这个你要注意的你布局和约束
因为你的UILabel会根据约束而改变宽度.
图中的绿色部分宽度是97,而且是固定的,UILabel的约束是距离绿色部分为8,所以我们获取到的根据约束适配后的UILabel的宽度是<span style="font-family: Arial, Helvetica, sans-serif;">SCREEN_WIDTH(当前屏幕宽度)-105.</span>
<span style="font-family:Arial, Helvetica, sans-serif;">所以一定要确定精确的宽度,这是第一要素.
</span>
2. UIFont *font=[UIFont systemFontOfSize:17];
第二就是你的字体,和字体号,一定要和你Storyboard或者Xib文件中的对应的UILabel的字体和字号要对应,否则也会出现计算出来的高度不是预期的.
总结:
<span style="white-space:pre"> </span>保证以上2点的准确性,就不会有问题.
<span style="white-space:pre"> </span>如果出现计算出的高度有误差,请遵照以上2点仔细检查.