美文网首页Swift学习程序员IOS开发
十分钟学会cell自适应高度(Swift)

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

作者: 鹿丸眼中的云 | 来源:发表于2016-03-12 20:13 被阅读7246次

cell自适应高度

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

重点讲解

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

使用前提

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

图片展示运行情况

![cell自适应高度2.png](https://img.haomeiwen.com/i1646838/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
    }()
}

相关文章

网友评论

  • 南宫轩涵:大神有社交联系方式吗?
  • 与伟大LEE同行:闭包语法惨不忍睹...:smirk:
  • 32f8f0936389:然而并没有什么用,还是老老实实算吧
  • AllenZYQ:自动适应高度的话 会不会很影响性能? 之前写的都是用代码先把高度算出来 再在代理返回高度。
  • 杰克道长:我撸了一遍,真没什么出现自适应。难道撸错了?
    smkoc:这是自适应 ? 死数据
    AllenZYQ:不用实现tableView高度的代理
  • 学霸学霸不学也霸:恩,看了下,完全没卵用。。。
  • 云飞君:设置了contentView布局后文字不显示了。。不设置又不能自适应。。😅
  • 鹿丸眼中的云:你集成了snapkit框架了吗
  • 歌的神:楼主,snp_makeConstraints 这是什么意思啊,为啥一直报错啊
    歌的神:奥,可以发个小demo吗
    鹿丸眼中的云:@歌的神 这个是snapkit框架里的api

本文标题:十分钟学会cell自适应高度(Swift)

本文链接:https://www.haomeiwen.com/subject/gavxlttx.html