與預(yù)估行高有關(guān):
在estimatedRowHeight機制下,在reloadData的時候标锄,會重新計算contentSize,所有cell顯示完后才會確定contentSize的值茁计,這樣就有可能引起contentOffset的變化料皇,從而再次觸發(fā)底部的刷新,導(dǎo)致你明明動了一下手星压,卻連刷了多次的行為践剂。
分兩種情況:
一、若你在創(chuàng)建tableView時指定了行高:
self.lazyTableView.rowHeight = 100娜膘;
那么你需要在下面加入這句代碼(值與上方一樣)
self.lazyTableView.estimatedRowHeight = 100;
二逊脯、若你在創(chuàng)建tableView時沒有指定行高,行高是動態(tài)計算的竣贪,那么就有些麻煩了:
如果你在創(chuàng)建tableView時 指定了預(yù)估行高:self.lazyTableView.estimatedRowHeight = 100军洼;那么會導(dǎo)致在上拉加載時會多次觸發(fā)加載操作。
如果你在創(chuàng)建tableView時禁用了預(yù)估行高:self.lazyTableView.estimatedRowHeight = 0演怎;那么有可能導(dǎo)致初次進入tableView時匕争,最上方顯示的并不是第一個cell,而是中間的cell爷耀。
(以上矛盾情況出現(xiàn)的場景是:一個tableView下有兩種自定義的cell甘桑,每個自定義cell的高度都需要動態(tài)計算)
我的解決辦法是:在創(chuàng)建tableView時 和下拉刷新方法中,指定預(yù)估行高:self.lazyTableView.estimatedRowHeight = 100歹叮;讓初次進入tableView和下拉刷新時最上方顯示第一個cell; 在上拉加載的方法中禁用預(yù)估行高self.lazyTableView.estimatedRowHeight = 0跑杭;以解決上拉加載多次觸發(fā)的問題。
在解決上方的問題后盗胀,又發(fā)現(xiàn)了一個問題:在多次上拉加載后艘蹋,回到頂部進行下拉刷新后,第一行cell被導(dǎo)航欄遮住了一部分票灰,解決的辦法是女阀,在下拉刷新的方法中重置contentInset:self.lazyTableView.contentInset = UIEdgeInsetsZero;
水平有限,解決了這些問題略顯繁瑣屑迂,若有好方法望不吝告知浸策。