cell自适应高度
- cell高度根据label高度变化而变化(代码见下面)
重点讲解
设置 tabelView 行高,自动计算行高
tableView.rowHeight = UITableViewAutomaticDimension
// 设置预估行高 --> 先让 tableView 能滚动,在滚动的时候再去计算显示的 cell 的真正的行高,并且调整 tabelView 的滚动范围
tableView.estimatedRowHeight = 300
- 给cell的contentView布局,让其底部与label底部对应
使用前提
- 用到了SnapKit框架
- 如需要添加其他的控件,可利用自动布局添加,注意让cell的contentView的底部与最下面的控件的底部对应即可
图片展示运行情况
![cell自适应高度2.png](http://upload-images.jianshu.io/upload_images/1646838-ccf81342c88a58be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
代码
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
}
}
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
}()
}