前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 设置tableViewCell的高度

iOS 设置tableViewCell的高度

作者头像
码客说
发布2019-10-22 14:16:11
2.3K0
发布2019-10-22 14:16:11
举报
文章被收录于专栏:码客码客码客

前言

iOS tableView的cell在显示之前必须获取cell的高度,如果cell的高度都一样,统一设置就行了,但是cell的高度不统一的话就要一一设置了,在ios8之前,需要自己手动去计算,iOS之后就方便多了

iOS8以下(不包含iOS8)

定义全局变量

//用于缓存计算高度的cell
var offscreenCells:[String:AnyObject] = [:];

保存计算高度的Cell实例

let cell = NSBundle.mainBundle().loadNibNamed("PingjiaTableViewCell", owner: nil, options: nil)[0] as! PingjiaTableViewCell;
self.offscreenCells["PingjiaTableViewCell"] = cell;

计算高度

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
   let item = tableItem[indexPath.section][indexPath.row];
   let cell = self.offscreenCells["PingjiaTableViewCell"] as! PingjiaTableViewCell;
   cell.pingjiaLabel.text = item["text"];
   //不定高度的label的高度
   let textHeight = cell.pingjiaLabel.sizeThatFits(CGSizeMake(cell.pingjiaLabel.frame.size.width, CGFloat(FLT_MAX))).height;
   //把label当成一行所得到的高度
   let minHeight = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height + 1;
   return textHeight + minHeight - 10;
}

iOS8以上(包含iOS8)

添加一下两个属性就行了

self.tableView.estimatedRowHeight = 44.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;

去掉下面的代理方法

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 50;
}

这样做有一个坑 在网上找了好久没找到解决方法,试了好久终于找到了解决方法

假如UITableViewCell中就放一个view 设置该view以下约束

宽度和高度(假设为宽100 高100)
水平居中
距离顶部距离(=10)
距离底部距离(>=10)

这样设置之后UITableViewAutomaticDimension就可以算出该cell的高度并正确显示,但是控制台老是报错误

Probably at least one of the constraints in the following list is one you don't want

就是说你约束多了,但是明明不多啊 是不多 是系统给你加的 cell的高度你是没加,系统估算高度为120,就自己加了该约束,这样约束就多了,所以就报错了,怎样解决呢,又不能删除原有约束

这种情况约束的优先级(Priority)就起作用了,一般我们添加约束优先级默认都是1000,系统自己添加的这个约束也是1000,我们只要降低我们自己view高度约束的优先级就行了,设置高度的约束优先级750,这样当系统估算后添加估算高度后,我们自己设置的高度就不起作用了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • iOS8以下(不包含iOS8)
      • iOS8以上(包含iOS8)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档