現(xiàn)象
當(dāng)UITableView滑動(dòng)范圍大于UITableView自身的時(shí)候 裂七,滑動(dòng)到最底部屠阻,點(diǎn)擊cell 刷新 會(huì)出現(xiàn)跳動(dòng)铸题,系統(tǒng)不一樣跳動(dòng)高度也不一樣測(cè)試看看
復(fù)現(xiàn) iOS13.1 iphone7
-
設(shè)置UITableView高度離購(gòu)物車(chē)按鈕還要20px距離
-
設(shè)置UITableView高度離購(gòu)物車(chē)按鈕0px
復(fù)現(xiàn) iOS12.4.5 iphone6
參考
iOS TableView reloadData刷新列表cell亂跳祝迂、iOS11 UITableView reloadData 界面跳動(dòng)問(wèn)題
原因:
產(chǎn)生的原因是在創(chuàng)建TableViewCelll的時(shí)候,系統(tǒng)給加了一個(gè)默認(rèn)預(yù)估estimatedRowHeight
的cell高度== UITableViewAutomaticDimension
铁材。
參見(jiàn)系統(tǒng)屬性備注:[@property](https://my.oschina.net/property) (nonatomic) CGFloat estimatedRowHeight NS_AVAILABLE_IOS(7_0); // default is UITableViewAutomaticDimension, set to 0 to disable
默認(rèn)是UITableViewAutomaticDimension
,當(dāng)設(shè)置這個(gè)屬性是0的時(shí)候,就不會(huì)估算cell高度了奕锌。
iOS 11以后系統(tǒng)默認(rèn)開(kāi)啟Self-Sizing著觉,Self-Sizing官方文檔解釋?zhuān)捍蟾攀钦f(shuō)我們不用再自己去計(jì)算cell的高度了,只要設(shè)置好這兩個(gè)屬性歇攻,約束好布局固惯,系統(tǒng)會(huì)自動(dòng)計(jì)算好cell的高度,正是這個(gè)原因?qū)е铝烁叨扔?jì)算出現(xiàn)問(wèn)題缴守,出現(xiàn)跳動(dòng)現(xiàn)象
解決方案
tableView.estimatedRowHeight = 0;
如果你有使用葬毫、加載sectionHeadView或sectionFootView的需求镇辉,也會(huì)出現(xiàn)閃屏現(xiàn)象,同理將這兩個(gè)估算高度設(shè)置為0即可贴捡。
if (@available(iOS 11.0, *))
{
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
tableView.estimatedRowHeight = 0;
tableView.estimatedSectionFooterHeight = 0;
tableView.estimatedSectionHeaderHeight = 0;
}
else
{
self.automaticallyAdjustsScrollViewInsets = NO;
}
或者協(xié)議方法
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 200*ADAPTER_WIDTH;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section
{
return 50*ADAPTER_WIDTH;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section
{
return 0;
}
遺憾
iOS12.4.5 iPhone滑動(dòng)到底部還是有些跳動(dòng) 只是跳動(dòng)范圍變小了