簡體   English   中英

在采用動態大小的單元格並將內容偏移設置為頂部后,UITableView 沒有一直滾動到頂部

[英]UITableView not scrolling all the way to top after resorting dynamic size cells and setting content offset to top

我有一個帶有動態大小的單元格的表格視圖,以及一個切換這些單元格的排序順序的按鈕。 每次切換排序順序時,我都想滾動到頂部,但是當我將內容偏移設置到頂部時,它似乎只滾動了大約 90% 的路徑。

抵消代碼很簡單,並且在不同的項目中為我提供了很好的服務,所以我嚴重懷疑問題出在這里:

- (void) scrollToTop
 {
    CGPoint offset = CGPointMake(0, -self.tableView.contentInset.top);
    [self.tableView setContentOffset:offset animated:YES];
}
    [self.tableView reloadData]; // Lets update with whatever info we have
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

重新加載然后滾動為我解決了。

沒想到這么快就找到答案了。

我正在使用 UITableView 的tableView:estimatedHeightForRowAtIndexPath:返回我的最小單元格高度,並且似乎 tableview 在reloadData中使用它來創建在實際使單元格出列並緩存它們的高度之前內容有多大的想法。 在內容的中途並重新加載數據會導致表格視圖認為到頂部的距離是(當前可見屏幕上方的單元格數 * 來自estimatedHeightForRow的HeightForRow 的最小高度),導致表格視圖僅偏移自身,就好像所有單元格都是最小高度。 我的解決方案只是避免使用估計的高度,因為我的 tableview 無論如何都不會太長。 如果您確實有一個大表視圖(接近 1000 多行),出於性能原因實際上需要使用估計值,您可能希望找到一種方法使估計值盡可能接近運行時值,或者查看更多詳細的解決方案。

tl;dr - 刪除tableView:estimatedHeightForRowAtIndexPath:並只允許 tableView 從heightForRowAtIndexPath調整自身大小

像這樣的東西呢?

NSIndexPath *start = = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:start atScrollPosition:UITableViewScrollPositionTop animated:YES];

這些都不適合我。 解決方案是在設置內容偏移量之前調用layoutIfNeeded()

tableView.reloadData();
tableView.layoutIfNeeded();
tableView.setContentOffset(CGPoint.Empty, animated: true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM