iOS 8自适应高度单元格问题

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       

iOS 8 中通过UITableViewAutomaticDimension 常量支持自适应高度的单元格(iOS 7 就要麻烦得多)。但是在实际应用中,我们需要注意以下几个问题:

1、  设置好模板单元格的自动布局
模板单元格中,subviews的自动局部必须要能够把单元格撑满。也就是说,iOS 必须能够通过内容的自动布局约束计算出 cell 的高。以下面的单元格为例:

cell中有上下两个 Label,上面的Label只有一行文本(lines为1),所以高度在运行时不会改变,但下面的Label是多行文本(lines为0),运行时其高度会根据文本内容自动增长。
左图中的自动布局是正确的,因此运行时单元格能够自适应高度。这是因为iOS能够根据cell的contentView中的各个子View计算出cell的正常高度,计算方式为:
cell 高度 = 第1个Label的top+第1个Label高度+第2个Label的top+第2个Label高度(根据内容自动计算)+第2个Label的bottom

但是当我们将第2个Label的top约束(或者bottom约束)删除,如右图所示,我们已经把图中红框所示位置的约束删除了,则iOS无法计算单元格的高度了。因为上述公式中的一个变量缺失。这样运行时表格中的所有cell都是固定高度,cell之间会发生重叠,同时控制台会报错:

Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell’s content view. We’re considering the collapse unintentional and using standard height instead.

2、  在viewDidLoad中设置tableView

接下来在viewDidLoad中设置tableView:
tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 100;

第一句的作用如前面所述,是开启iOS 8的单元格的自适应高度特性。第二句代码也是同样的功能,estimatedRowHeight让你提供一个预先估计cell的高度值,这个值根本可以乱设(只要不为0),但如果你不写这句,或者将estimatedRowHeight属性设置为0,则iOS 8的单元格自动高度特性也不会生效。

3、  heightForRowAtIndexPath方法和estimatedHeightForRowAtIndexPath方法
开启了iOS 8 的单元格自动高度特性后,这两个方法就不需要了,或者简单地返回一个UITableViewAutomaticDimension常量:
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
当然,完全删除这两个方法也没有关系。

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值