84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
tableView 的cell中添加了计算cell的高度并且调用代理方法,返回给视图控制器当服务器返回数据源的时候,刷新tableView。但是,此时执行的cellForRowIndexPath 的indexPaht 是从第四行开始的,,将前边的几个给跳过了,我试着将cell的高度写成定值,结果cell的数量正常,这会是什么问题?
应该是高度计算滞后了。tableView的显示顺序大致是:请求sectionNumber和numberForSection获取一共有多少个section和cell。请求heightForRow:atIndexPath获取即将显示在界面上的 cell 的高度。然后请求cellForRow获取这个 cell 的实例。然后设置 cell 的高度等,layout 之后调用willDisplay等回调方法,然后显示在界面上。
sectionNumber
numberForSection
heightForRow:atIndexPath
cellForRow
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; }
应该是高度计算滞后了。
tableView的显示顺序大致是:
请求
sectionNumber
和numberForSection
获取一共有多少个section和cell。请求
heightForRow:atIndexPath
获取即将显示在界面上的 cell 的高度。然后请求
cellForRow
获取这个 cell 的实例。然后设置 cell 的高度等,layout 之后调用
willDisplay
等回调方法,然后显示在界面上。所以你刷新 tableView 时高度这部分的处理应该是,先根据数据源计算cell高度而不是让cell实例计算好了再回调给控制器。当然,你也可以在cell中计算,比如在cell中有个类方法,根据传入的cell数据计算,并由控制器主动调用这个方法。大概代码如下:
在 controller 或 tableView 的 delegate 实现类中:
MyTableViewCell: