十分钟学会cell自适应高度(Swift)

cell自适应高度

  • cell高度根据label高度变化而变化(代码见下面)

重点讲解

  • 自动计算高度及设置预估行高
设置 tabelView 行高,自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置预估行高 --> 先让 tableView 能滚动,在滚动的时候再去计算显示的 cell 的真正的行高,并且调整 tabelView 的滚动范围
        tableView.estimatedRowHeight = 300
  • 给cell的contentView布局,让其底部与label底部对应

使用前提

  • 用到了SnapKit框架
  • 如需要添加其他的控件,可利用自动布局添加,注意让cell的contentView的底部与最下面的控件的底部对应即可

图片展示运行情况

十分钟学会cell自适应高度(Swift)_第1张图片
![cell自适应高度2.png](http://upload-images.jianshu.io/upload_images/1646838-ccf81342c88a58be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代码

  • ViewController
import UIKit

class ViewController: UITableViewController{

    override func viewDidLoad() {
        super.viewDidLoad()
       
        self.tableView.delegate = self
        self.tableView.dataSource = self
        //注册cell
        self.tableView.registerClass(WHTableViewCell.self, forCellReuseIdentifier: "cell")
        
        // 设置 tabelView 行高,自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置预估行高 --> 先让 tableView 能滚动,在滚动的时候再去计算显示的 cell 的真正的行高,并且调整 tabelView 的滚动范围
        tableView.estimatedRowHeight = 300

    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
    
}

//数据源方法
extension ViewController{

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell : WHTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell")! as! WHTableViewCell
//cell.contentLable.text = "我有过多次这样的奇遇,从天堂到地狱只在瞬息之间;每一朵可爱、温柔的浪花,都成了突然崛起、随即倾倒的高山。\n\n每一滴海水都变脸变色,刚刚还是那样美丽、蔚蓝;旋涡纠缠着旋涡,我被抛向高空又投进深渊……"
        cell.contentLable.text = "我有过多次这样的奇遇,\n从天堂到地狱只在瞬息之间;\n每一朵可爱、温柔的浪花,\n都成了突然崛起、随即倾倒的高山。\n\n每一滴海水都变脸变色,\n刚刚还是那样美丽、蔚蓝;\n旋涡纠缠着旋涡,\n我被抛向高空又投进深渊……"
        return cell
    }
    
}
  • WHTableViewCell
import UIKit

class WHTableViewCell: UITableViewCell {

    //重写cell init方法
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func setupUI(){
    
        self.contentView.addSubview(self.contentLable)
        
        contentLable.snp_makeConstraints { (make) -> Void in
            make.leading.equalTo(self.contentView).offset(10)
            make.trailing.equalTo(self.contentView).offset(-10)
            make.top.equalTo(self.contentView).offset(10)
        }
        //重点:给contentView布局,让它的底部跟contentLable的底部一致
        contentView.snp_makeConstraints { (make) -> Void in
            make.bottom.equalTo(self.contentLable.snp_bottom).offset(10)
            make.leading.equalTo(self)
            make.top.equalTo(self)
            make.trailing.equalTo(self)

        }
    }
    
    //懒加载label
    lazy var contentLable:UILabel = {()-> UILabel in
    
       let lable:UILabel = UILabel()
        lable.numberOfLines = 0
        lable.userInteractionEnabled = true

        return lable
    }()
}

你可能感兴趣的:(十分钟学会cell自适应高度(Swift))