1.抖動(dòng)問題:使用系統(tǒng)方法自動(dòng)布局會(huì)造成來回切換頁面數(shù)據(jù)刷新時(shí)愧哟,上下滑動(dòng)會(huì)一直抖動(dòng)只嚣,設(shè)置header和footer的預(yù)估高度只適用于一種header或footer的高度,如果有多種header或者footer高度不斷變化无拗,就會(huì)抖動(dòng)挫鸽,親測(cè)有效缚柳。其實(shí)說到底我們的需求大部分只需要設(shè)置cell的自動(dòng)布局就OK了,cell的控件比較多的情況搪锣,手動(dòng)計(jì)算很繁瑣秋忙,只不過是header和footer的預(yù)估高度默認(rèn)就是自動(dòng)布局了,我們頁不會(huì)去想到是這個(gè)原因构舟,還以為是cell的自動(dòng)布局導(dǎo)致的抖動(dòng)翰绊,那這樣就直接設(shè)置header和footer的預(yù)估高度等于0禁用掉,然后在代理方法里面設(shè)置高度即可旁壮,cell的高度計(jì)算還是可以使用UITableViewAutomaticDimension計(jì)算的监嗜。
_tableView.estimatedRowHeight = 120.f;
_tableView.estimatedSectionHeaderHeight = 50.f;
_tableView.estimatedSectionFooterHeight = 60.f;
_tableView.rowHeight = UITableViewAutomaticDimension;
,
_tableView.estimatedRowHeight = 120.f;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;//禁用掉或者準(zhǔn)確的設(shè)置高度,否則都會(huì)造成抖動(dòng)
_tableView.rowHeight = UITableViewAutomaticDimension;
其他的方法:好像不太適用我的頁面抡谐,因?yàn)槲疫@個(gè)tableview有2段接口數(shù)據(jù)分開加載顯示的
// declare cellHeightsDictionary
NSMutableDictionary *cellHeightsDictionary;
// initialize in code (thanks to @Gerharbo)
cellHeightsDictionary = @{}.mutableCopy;
// declare table dynamic row height and create correct constraints in cells
tableView.rowHeight = UITableViewAutomaticDimension;
// save height
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
[cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath];
}
// give exact height value
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSNumber *height = [cellHeightsDictionary objectForKey:indexPath];
if (height) return height.doubleValue;
return UITableViewAutomaticDimension;
}
2.當(dāng)我滑動(dòng)到當(dāng)前cell時(shí)裁奇,點(diǎn)擊上面的按鈕重新加載數(shù)據(jù)刷新頁面,發(fā)現(xiàn)整個(gè)tableview自動(dòng)滑到最頂部了麦撵,我想要的效果刷新后繼續(xù)停在當(dāng)前cell刽肠。后面發(fā)現(xiàn)是因?yàn)閇tableView reloadData]方法的時(shí)機(jī)不太對(duì)造成的,恰好刷新時(shí)數(shù)據(jù)源被清空或者數(shù)據(jù)源的數(shù)量改變了免胃,所以一定要在整個(gè)數(shù)據(jù)源賦值完成之后再對(duì)整個(gè)tableview進(jìn)行reload音五,或者只影響當(dāng)前cell只刷新當(dāng)前cell的方法就ok了,我這個(gè)是對(duì)整個(gè)頁面的數(shù)據(jù)都有影響所以才使用[tableView reloadData]方法
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者