学而乐

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  在UITableView获取高度的代理方法中,经常需要根据实际的模型重新计算每个Cell的高度。直接的做法是在该代理方法中,直接根据模型来返回行高;另

[1]-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

一种比较优雅的方式是将高度的获取方法放在一个单独的frame中[2],frame中包含了该Cell显示需要的数据模型。

    但是在IOS8之后,苹果提供了一个更简便的方法。该方法要求使用Auto layout,刚开始查了很多关于动态获取高度的方法,这些文章中都是使用的Interface builder实现。于是将Auto layout和Interface builder两个概念混为一谈,认为只有使用Interface builder技术才能实现动态高度获取。再此,也陈述下Auto layout的概念:主要是指依靠约束来达到对某一元素的定位,最常见的使用了该技术的是Masonry开源库。因此,在自定义Cell中用该库实现约束的,理论上是可以自动获取高度的,具体方法如下代码:

  self.tableView.rowHeight = UITableViewAutomaticDimension;

    self.tableView.estimatedRowHeight = 40.0;

    只需要设置tableview的两个属性rowHeight和estimatedRowHeight。其中rowHeight的属性默认设置为UITableViewAutomaticDimension,改代码可以省略,具体意思查了相关资料也没得到结论;estimatedRowHeight是预估的Cell高度,不必很准确,如果需要比较准确的得到每个Cell的高度,可以使用另一个代理方法[3]。还有一个重点需要提及,UITabeView中的每个Cell的高度代理方法不需要实现。

[3]-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

    

 

posted on 2017-03-20 20:26  赖皮猪1号  阅读(192)  评论(0编辑  收藏  举报