关于TableViewCell 自适应(文字自适应)



今天工作中遇到了需要根据文字数,自动换行,同时还得保持布局的正确.



-(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点仔细检查.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值