【IOS】最简单方法实现Cell文字高度自适应.
2018-02-22 09:14
441 查看
本教程适合新手.
系统:IOS7之后.
纯文本高度.
现在自定义的cell中将高度随着内容动态改变的label的布局使用autolayout布局完成,这里有个注意点就是label和cell边界的距离要确定好,不能固定死label的高度.
然后设置label的numberOfLines=0,行数设置为0即意味着label可以有任意行。
实现以下两个tableview的delegate中的方法:
是的,只要实现这两个方法,然后运行你的项目,你会惊讶的发现,哇塞,高度完美自适应…
效果图
这里有两个关键点:
关键点1:必须重写
在
关键点2:真实高度返回值为
UITableViewAutomaticDimension
Demo地址:https://github.com/yuying2012/WJDStudyLibrary
这是一个大工程,请从工程中寻找相关模块代码.
系统:IOS7之后.
纯文本高度.
血的教训:
相信大家曾经为了实现cell的高度自适应,肯定少苦。那个时候,我是在我的数据模型model中添加一个height属性,实现它的get方法,在get方法中计算需要多行显示文字的高度,然后再加上其他乱七八糟的高度并返回,然后在tableview的- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath中获取到每行对应的model,取出其中的model.height属性的值返回,还要在cell中确定cell中label的高度。。。总之就是很麻烦,而且还不一定总能算的很正确,甚是受此困扰。
柳暗花明:
我一直想,这种笨方法肯定有更简单的方法取代,终于有一天我google一番之后发现了一个好方法.只要你懂一定的Autolayout知识的话,原来实现这种的cell高度自适应,其实是非常非常简单的:现在自定义的cell中将高度随着内容动态改变的label的布局使用autolayout布局完成,这里有个注意点就是label和cell边界的距离要确定好,不能固定死label的高度.
然后设置label的numberOfLines=0,行数设置为0即意味着label可以有任意行。
实现以下两个tableview的delegate中的方法:
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return 10; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; }
是的,只要实现这两个方法,然后运行你的项目,你会惊讶的发现,哇塞,高度完美自适应…
效果图
这里有两个关键点:
关键点1:必须重写
estimatedHeightForRowAtIndexPath方法 这个方法是iOS7.0之后才出现的,如果不重写此方法,仅重写
heightForRowAtIndexPath,那么大家会发现,cell并不会根据label的内容,自适应高度。因为系统是先获取cell的高度,再获取cell的view。也就是先调用
heightForRowAtIndexPath,再调用
cellForRowAtIndexPath。
在
cellForRowAtIndexPath被调用之前,你的label是没有被设置文本内容的,因此它获取到的高度,并不是你想要的。那么我们必须想办法让系统在获取了cell之后,再获取cell的高度。方法就是,重写estimatedHeightForRowAtIndexPath,顾名思义,它会返回一个估计高度,有了这个方法后,tableview会先调用它获取估计高度,然后获取cell,最后获取真实高度。
estimatedHeightForRowAtIndexPath的返回值可以随意,返回多少都可以,只是给tableview一个安慰而已,让它延迟获取真实的高度。
关键点2:真实高度返回值为
UITableViewAutomaticDimension
Demo地址:https://github.com/yuying2012/WJDStudyLibrary
这是一个大工程,请从工程中寻找相关模块代码.
相关文章推荐
- IOS研究成果——在autolayout 如何实现 Cell 的高度自适应
- IOS XIB Cell自适应高度实现
- iOS UITableView+FDTemplateLayoutCell 配合AutoLayout分分钟教你实现动态高度自适应
- 根据展示文字自适应 cell 高度,实现点击cell的伸缩扩展
- 【iOS】UITextView实现placeHolder占位文字最简单的方法
- iOS UILabel自适应高度的简单实现
- iOS实现Cell自适应高度
- iosiOStextView实现文字高度自适应
- 【IOS】UITextView实现placeHolder占位文字最简单的方法
- IOS7.0 UILabel实现自适应高度的新方法
- ios之UITableView批量选中cell并实现删除cell的简单方法
- iOS 开发--相对来说比较简单的cell高度自适应
- iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
- (原创)iOS中cell高度自适应方法UITableView设置
- iOS开发最简单的让你的Cell自适应高度
- iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
- cell高度自适应实现的最简单方式
- iOS 使用Autolayout实现cell的高度自适应
- 简便方法IOS中自适应文字高度
- iOS自动布局实现Cell和Tableview高度自适应(SDAutoLayout)