zoukankan      html  css  js  c++  java
  • 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 
    关键点3:cell中的元素,必须相对于cell的顶部和底部布局,这样在元素中的内容动态变化的时候,才能撑开cell

  • 相关阅读:
    在MVC中更新ModelFirst Entity Framework POCO实体外键的方法
    美国行照片集十四:洛杉矶拉斯维加斯之旅
    深入ASP.NET MVC之三:Controller的激活
    美国行照片集之十三:感恩节之旅
    深入ASP.NET MVC 之一:IIS到路由表
    博客样式改版
    关于如何用string保存二进制数据的问题
    XSI IPC机制的优缺点
    C,C++,java,python对比
    grunt requireJS 的基础配置
  • 原文地址:https://www.cnblogs.com/somebodywx/p/8929372.html
Copyright © 2011-2022 走看看