objective-c - tableView中只不显示数据源的前几个,稍微向下拖拽就会显示完全,什么原因?

 fly-fox 发布于 2022-10-25 09:15

tableView 的cell中添加了计算cell的高度并且调用代理方法,返回给视图控制器
当服务器返回数据源的时候,刷新tableView。
但是,此时执行的cellForRowIndexPath 的indexPaht 是从第四行开始的,,
将前边的几个给跳过了,
我试着将cell的高度写成定值,
结果cell的数量正常,
这会是什么问题?

1 个回答
  • 应该是高度计算滞后了。
    tableView的显示顺序大致是:
    请求 sectionNumbernumberForSection 获取一共有多少个section和cell。
    请求 heightForRow:atIndexPath 获取即将显示在界面上的 cell 的高度。
    然后请求 cellForRow 获取这个 cell 的实例。
    然后设置 cell 的高度等,layout 之后调用 willDisplay 等回调方法,然后显示在界面上。

    所以你刷新 tableView 时高度这部分的处理应该是,先根据数据源计算cell高度而不是让cell实例计算好了再回调给控制器。当然,你也可以在cell中计算,比如在cell中有个类方法,根据传入的cell数据计算,并由控制器主动调用这个方法。大概代码如下:

    在 controller 或 tableView 的 delegate 实现类中:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSDictionary *cellData = self.dataSource[indexPath.row];
        return [MyTableViewCell cellHeightForData:cellData];
    }

    MyTableViewCell:

    + (CGFloat)cellHeightForData:(NSDictionary *)cellData
    {
        // 根据 cellData 计算 cell 的高度
        return height;
    }
    2022-10-26 14:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有