美文网首页程序员
UITableView自动计算高度

UITableView自动计算高度

作者: 彩虹的洪 | 来源:发表于2018-03-16 16:25 被阅读0次

苹果从iOS7开始就支持用AutoLayout来计算UITableViewCell的高度了,只要对UITableView的estimatedRowHeight属性设置一个非0值就可以开启。但是发现到现在好像还是有些同学不知道这个功能😂。

为了更好的解释自动布局是怎么在其中发挥作用的,所以决定从最基本的布局说起。

一个视图要想确定自身的位置,那么必须要知道其尺寸和位置,尺寸就是宽度和高度。位置有中心点坐标,或者左上角坐标等。。
举个栗子🌰:

上图中绿色视图位于白色视图中心,宽高都为白色视图的一半。一共添加了这4条约束 这4条约束确定绿色视图的尺寸和位置。所以绿色视图就可以按照我们的要求固定在正确的位置了!
但是! 这是有前提的。我们假定了白色视图的大小和位置已经确定!如果白色视图的位置大小不确定,那么绿色视图也自然没有办法算出自己的位置大小。这就是UITableViewCell上布局是和在ViewController的view上布局的不同了,应为ViewController的主视图大小是预先确定了的。如果TableView没有开启自动计算高度(也就是estimatedRowHeight的值为0)那么Cell的大小也是可以确定了的(宽度为TableView的宽度,高度为rowHeight的值或者代理方法返回的值) 其实离目标只差一条约束了!开启了TableView自动计算高度后Cell的宽度是有了,但是还差一个高度。所以我们再添加一条约束用来确定Cell的高度。这时,TableView就可以正常的自动计算高度了。 这里给绿色的视图加了条高度的约束那么就可以确定出Cell的高度了 运行程序效果如上👆
再加入Label试试,由于Label自身可以根据文本内容算出尺寸,所以不需要独立设置高度约束。约束如下。
所有约束 运行结果

一些坑

  • 记得设置estimatedRowHeight为非0值。
  • 约束要添加在Cell的contentView上,而不是Cell本身。
  • estimatedRowHeight的值最好大于Cell的平均高度,不然在一些情况下设置偏移量会不正确。

源码在 这里

相关文章

网友评论

    本文标题:UITableView自动计算高度

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