热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

iOS给tableView每行设置预估行高estimatedRowHeight,达到cell高度的自适应

在iOS8之后苹果推出的一个新特性SelfSizingCells,意思就是让cell自己计算自己的高度,当我们在cell里面添加完所需控件,并约束好位置之后,我们只需要设置tab

在iOS8之后苹果推出的一个新特性Self Sizing Cells,意思就是让cell自己计算自己的高度,当我们在cell里面添加完所需控件,并约束好位置之后,我们只需要设置


tableView.estimatedRowHeight = 44.0f;//推测高度,必须有,可以随便写多少

tableView.rowHeight =UITableViewAutomaticDimension;//iOS8之后默认就是这个值,可以省略


这两句代码之后,即可放心的往cell的控件里面加上内容,cell会根据内部所有控件的高度动态的计算自己的高度从而显示出来。这个就有点类似于html5中的body,会根据自己内部的内容调整自己的大小。这就给iOS开发者提供了很大的便利,不再需要之前复杂的自适应计算方法。但是要注意的是,这个需要在iOS8之后才可以使用,如果你的应用要适配iOS8之前的版本,可能无法使用该机制,当然也可以对系统版本进行判断之后再决定使用哪一套适配方案。


介绍cell子控件如何autolayout

我查了一些资料是这样说的模板单元格中,subviews的自动局部必须要能够把单元格撑满。也就是说,iOS 必须能够通过内容的自动布局约束计算出
cell 的高。
但是以我的理解,必须保证cell中子控件在一条Y轴上有自上而下所有的约束,我这么说可能不太理解,我来个迷之画图吧

好,我们来假设一个场景吧,李菊福一波,还是上图的cell,imageview是头像,label1是昵称,label2是评价的内容,可能很长需要换行等等,所以这就要求我们的cell需要在特定是的数据面前"各不相同"..
一般来说,imageView给这些约束就差不多(不在主要讨论范围)

numberOfLines = 0不多说,我们还要对他高度的约束做一个小小的设置如下图,让laebl2的高度大于等于原来的高度

cell高度 = imageViewY值(label1Y值) + label1高度 + label2top距离label1bottom间距
+ label2高度(不确定,数据很多会变化,大于等于原设置的高度) + label2bottom距离bellbottom的间距

我们这样一番折腾后,cell子控件的Y轴方向的所有约束全部搞定了,然后我们按照自己的套路去给cell的子控件赋值数据什么的就可以了,别忘了给tableView设置文章一开头设置的那两句话,这样我们的cell就做到了自适应的高度,我文章中举的例子非常简单,我相信大家再公司的项目中cell要复杂的多,只要遵循Y轴方向的约束全部满足就可以了




推荐阅读
author-avatar
手机用户上官婉儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有