UITableView性能优化(二)

UITableview的行高处理优化,先设置好预估行高,这样系统的执行顺序便是,先创建cell,然后执行代理行高,返回对应cell的高度。
如果没有设置预估行高,执行顺序是先代理行高,再创建cell。

#pragma mark - <UITableViewDelegate>
//self.tabview.estimatedHeightForRowAtIndexPath = 200;同代理方法一个效果
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 200;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    DZMessage *message = self.messages[indexPath.row];
    return message.cellHeight;
}

cell行高的返回,以及不定行高的约束的更新。

- (void)setMessage:(DZMessage *)message
{
    _message = message;
    
    // 时间处理
    if (message.hideTime) { // 隐藏时间
        self.timeLabel.hidden = YES;
        [self.timeLabel updateConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(0);
        }];
    } else { // 显示时间
        self.timeLabel.text = message.time;
        self.timeLabel.hidden = NO;
        [self.timeLabel updateConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(21);
        }];
    }
    
    // 处理显示的消息文字
    // 设置按钮的文字
    [self.textButton setTitle:self.message.text forState:UIControlStateNormal];
    
    // 强制更新
    [self layoutIfNeeded];
    
    // 设置按钮的高度就是titleLabel的高度
    [self.textButton updateConstraints:^(MASConstraintMaker *make) {
        CGFloat buttonH = self.textButton.titleLabel.frame.size.height + 30;
        make.height.equalTo(buttonH);
    }];
    
    // 强制更新
    [self layoutIfNeeded];
    
    // 计算当前cell的高度
    CGFloat buttonMaxY = CGRectGetMaxY(self.textButton.frame);
    CGFloat iconMaxY = CGRectGetMaxY(self.iconView.frame);
    self.message.cellHeight = MAX(buttonMaxY, iconMaxY) + 10;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 3.Cell自己本身内部的调整 首先呢,大家都会用最基本的复用把... 很久之前的写法是判断有没有Cell,如果有...
    philiha阅读 541评论 0 50
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,045评论 19 139
  • iOS系列开发-UITableView性能优化 在我们的日常开发中,很多开发人员最常接触的就是UITableVie...
    spicyShrimp阅读 930评论 0 3
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,094评论 3 38
  • 数据结构与算法--关键路径 关键路径与无环加权有向图的最长路径 现在考虑一个这样的问题:你今天事情比较多,要洗衣服...
    sunhaiyu阅读 906评论 1 7