UITableView自动计算高度

苹果从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的平均高度,不然在一些情况下设置偏移量会不正确。

源码在 这里

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容