問(wèn)題:
正常網(wǎng)絡(luò)請(qǐng)求鹊碍,獲取到數(shù)據(jù)list,調(diào)用tableview reloadData之后,UI頁(yè)面刷新數(shù)據(jù)食绿,但是發(fā)現(xiàn)缺少部分?jǐn)?shù)據(jù)顯示侈咕,在屏幕上滑動(dòng)一下之后,數(shù)據(jù)全部顯示出來(lái)了
步驟1
斷點(diǎn)調(diào)試器紧,在tableview delegate中
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
//cell個(gè)數(shù)正常
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// 調(diào)用次數(shù)和cell個(gè)數(shù)不一致
步驟2
懷疑是否是線程調(diào)用問(wèn)題耀销,刷新數(shù)據(jù)時(shí)是在獲取到數(shù)據(jù)之后的網(wǎng)絡(luò)請(qǐng)求中,因此添加了調(diào)用主線程铲汪,結(jié)果仍然是數(shù)據(jù)不完整
__weak __typeof(self) weakself= self;
dispatch_async(dispatch_queue_create(0, 0), ^{
// 子線程執(zhí)行任務(wù)(比如獲取較大數(shù)據(jù))
dispatch_async(dispatch_get_main_queue(), ^{
// 通知主線程刷新
[ self.tableview reloadData];
});
});
多次糾結(jié)之后熊尉,發(fā)現(xiàn)之前代碼中使用了自適應(yīng)高度,由于刷新性能不佳掌腰,取消了自適應(yīng)改成了計(jì)算高度狰住,然后賦值的方式,然而代碼中仍然保留了
_tableview.estimatedRowHeight = 0.f;
依稀記得在iOS11 之后estimatedRowHeight不為0有所不同,于是嘗試齿梁,把SectionFooterHeight和SectionHeaderHeight也單獨(dú)拿出來(lái)賦值
_tableview.estimatedRowHeight = 0.f;
_tableview.estimatedSectionFooterHeight = 0.f;
_tableview.estimatedSectionHeaderHeight = 0.f;
此時(shí)催植,數(shù)據(jù)列表的刷新還是不完整,于是考慮是不是也需要實(shí)現(xiàn)代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.01f;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.01f;
}
呼~~~~~~~
終于正常了
開(kāi)始懷疑自己了I自瘛4茨稀!J『恕稿辙!
查了資料發(fā)現(xiàn)說(shuō),estimatedRowHeight賦值了之后气忠,需要實(shí)現(xiàn)對(duì)應(yīng)的代理方法
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 0.0f;
}
于是把SectionFooterHeight和SectionHeaderHeight的代理方法注釋邓深,只實(shí)現(xiàn)estimatedRowHeight的代理方法,數(shù)據(jù)居然也是正常的
//- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// return 0.01f;
//}
//
//- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
// return 0.01f;
//}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 0.0f;
}
好吧笔刹,estimatedRowHeight和對(duì)應(yīng)的代理方法一起使用應(yīng)該是最終的解決方法芥备,但是為什么實(shí)現(xiàn)了header和footer自適應(yīng)高度代理方法也能正常顯示,實(shí)在是沒(méi)有理解舌菜,最后我選擇
// _tableview.estimatedRowHeight = 0.f;
// _tableview.estimatedSectionFooterHeight = 0.f;
// _tableview.estimatedSectionHeaderHeight = 0.f;
也不需要實(shí)現(xiàn)任何代理方法萌壳,顯示正常OK。。袱瓮。缤骨。。尺借。
記錄挖坑绊起、填坑的xx一次,有不對(duì)的地方燎斩,歡迎大佬們指正