UITableview优化之Cell高度计算

24 篇文章 1 订阅
18 篇文章 0 订阅

cell高度一般分两种

一、定高

tableView.rowHeight = 80

相当于方法指定了所有cell高度都是80
对于定高cell,直接采用上面方式给定高度,不需要实现代理中 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 以节省不必要的计算和开销。
二、动态高度

代理方法实现后,上面的rowHeight的设置将会变成无效。在这个方法中,我们需要提高cell高度的计算效率,来节省时间。

  1. 对于计算出来的高度,没必要在进行二次计算。将他放到Model属性中缓存起来这样可以节约时间
  2. 使用自动布局并设置如下属性
	tableView.rowHeight = .automaticDimension
	tableView.estimatedRowHeight = 80.0

代理方法设置高度:func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 不要实现否则会引起程序崩溃

一般这种设置方式:需要满足:
1. 设置bottom也就是距离父视图间距,不然不会起作用
2. 自动布局:SnapKit、Masonry、系统自带的布局

Demo布局:SnapKit

	//cell布局代码:SnapKit:
		contentView.addSubview(mineIcon)
        contentView.addSubview(mineName)
        contentView.addSubview(timeName)
        contentView.addSubview(statusLabel)
        contentView.addSubview(problemDesc)
  
        mineIcon.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(15)
            make.height.width.equalTo(40)
            make.top.equalToSuperview().offset(10)
        }
        mineName.snp.makeConstraints { (make) in
            make.left.equalTo(mineIcon.snp.right)
                .offset(6)
            make.top.equalTo(mineIcon.snp.top)
                .offset(6)
            make.height.equalTo(18)
            make.width.equalTo(120)
        }
        timeName.snp.makeConstraints { (make) in
            make.left.equalTo(mineIcon.snp.right)
                .offset(6)
            make.top.equalTo(mineName.snp.bottom)
                .offset(2)
            make.height.equalTo(18)
            make.width.equalTo(160)
        }
        
        statusLabel.snp.makeConstraints { (make) in
            make.height.equalTo(20)
            make.width.equalTo(80)
            make.right.equalToSuperview().offset(-10)
            make.centerY.equalTo(mineName)
        }
        
        problemDesc.snp.makeConstraints { (make) in
            make.top.equalTo(mineIcon.snp.bottom).offset(10)
            make.height.equalTo(24)
            make.left.equalToSuperview().offset(15)
            make.right.equalToSuperview().offset(-10)
        }
       
        let bottomView = UIView.init()
       // bottomView.tag = 99999
        bottomView.backgroundColor = SwiftTableViewColor
        contentView.addSubview(bottomView)
        bottomView.snp.makeConstraints { (make) in
            make.height.equalTo(6)
            make.top.equalTo(problemDesc.snp.bottom).offset(10)
            make.bottom.equalToSuperview()
            make.left.right.equalToSuperview()
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值