tableview xib下的自适应

iOS TableView 自适应
本文介绍在iOS中如何使TableView的Cell高度自适应内容。对于iOS7及以下版本,通过设置临时宽度约束并利用Auto Layout计算得出高度;而在iOS8及以上版本,则可通过设置estimatedRowHeight与rowHeight为UITableViewAutomaticDimension轻松实现。

在xib的新时代,设置好约束一切都可以根据内容自适应.Tableview是个例外.

Tableview的问题:

1.Tableview在iOS7以下是个例外。iOS7以下delegate方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

是require的,也就是必须实现这个方法.(iOS8已经改成optional了).对于非定高的cell,我们期望它可以自适应,当是这里它还要我们给予一个计算的高度,这让我们很不爽.

如何解决自适应的问题,下面说道:

Tableview的解决方法:
iOS7及以下的解决方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {

    //先设置好所有的内容,这是必须的(否则得到的高度也是不准确的)

    self.prototypeCell.contentLabel.text = [self.details objectAtIndex:indexPath.row];

    

   //设置cell的临时宽度约束(不设置这个,居然是没法获取到正确值的)

    CGFloat contentViewWidth = [UIScreenmainScreen].bounds.size.width;

    

    NSLayoutConstraint *widthFenceConstraint = [NSLayoutConstraintconstraintWithItem:self.prototypeCell.contentViewattribute:NSLayoutAttributeWidthrelatedBy:NSLayoutRelationEqualtoItem:nilattribute:NSLayoutAttributeNotAnAttributemultiplier:1.0constant:contentViewWidth];

    [self.prototypeCell.contentViewaddConstraint:widthFenceConstraint];

    

    // Auto layout engine does its math //获取到内容高度(核心方法)

   CGFloat fittingHeight = [self.prototypeCell.contentViewsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

    //删除约束

    [self.prototypeCell.contentViewremoveConstraint:widthFenceConstraint];

    //获取到修正的高度,就是那个分割线的高度吧

    return  (fittingHeight += 1.0 / [UIScreen mainScreen].scale);

}

由于在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;方法里的时候这时候Tableview的cell还没有创建,这里需要一个专门用来计算的cell,所以我创建了一个属性专门用来存计算的cell. 

PS:这里只是它的大概实现,当然你必须设置好约束.

封装之后的库见:https://github.com/forkingdog/UITableView-FDTemplateLayoutCell


iOS8上的解决方法:

//iOS8实现自适应就是这么简单,连heightForRowAtIndexPath方法

都不要实现只要设置好topbottom约束即可.

    self.mainTableView.estimatedRowHeight =40;

    self.mainTableView.rowHeight =UITableViewAutomaticDimension;


ps:例子:https://github.com/songxuhua/TestForAutoLabel


参考:http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值