美文网首页iOS 程序员
tableview的heightForRowAtIndexPat

tableview的heightForRowAtIndexPat

作者: CoderLNHui | 来源:发表于2017-03-21 19:24 被阅读490次

    heightForRowAtIndexPath的调用

    • 每次刷新表格时,有多少数据,这个方法就一次性调用多少次(比如有100条数据,每次reloadData时,这个方法就会一次性调用100次)
      • 为什么会一次性调用?

      苹果需要计算tableView的contentsize,在界面上显示未进度条的长短,防止用户突然加速下拉时,能展示多少内容

    • 每当有cell进入屏幕范围内,就会调用一次这个方法

    estimatedRowHeight预设高度的调用

    • 用到了(显示了)哪个cell,才会调用这个方法(heightForRowAtIndexPath)计算那个cell的高度(heightForRowAtIndexPath方法调用频率降低了)

    使用estimatedRowHeight的优缺点

    • 优点
      1> 可以降低tableView:heightForRowAtIndexPath:方法的调用频率
      2> 将【计算cell高度的操作】延迟执行了(相当于cell高度的计算是懒加载的)

    • 缺点
      1> 滚动条长度不准确、不稳定,甚至有卡顿效果(如果不使用estimatedRowHeight,滚动条的长度就是准确的)

    所有cell的高度 -> contentSize.height -> 滚动条长度
    1000 * 20 -> contentSize.height -> 滚动条长度
    contentSize.height -> 200 * 20 -> 16800

    调用实例

    
    @property (nonatomic, strong) NSMutableArray<SHTopic *> *topics;
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return self.topics[indexPath.row].cellHeight;
    }
    
    
    
    #import <Foundation/Foundation.h>
    @interface SHTopic : NSObject
    
    /* 额外增加的属性(并非服务器返回的属性,仅仅是为了提高开发效率) */
    /** 根据当前模型计算出来的cell高度 */
    @property (nonatomic, assign) CGFloat cellHeight;
    @end
    
    
    
    @implementation SHTopic
    
    - (CGFloat)cellHeight
    {
        // 如果已经计算过,就直接返回
        if (_cellHeight) return _cellHeight;
        
        // 文字的Y值
        _cellHeight += 55;
        
        // 文字的高度
        CGSize textMaxSize = CGSizeMake(SHScreenW - 2 * SHMarin, MAXFLOAT);
        _cellHeight += [self.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]} context:nil].size.height + SHMarin;
        
        // 工具条
        _cellHeight += 35 + SHMarin;
        
        return _cellHeight;
    }
    @end
    

    相关文章

      网友评论

        本文标题:tableview的heightForRowAtIndexPat

        本文链接:https://www.haomeiwen.com/subject/ygggnttx.html