2016-01-23 85 views
1

在我的代码中,我重写了tableView:willDisplayCell,当显示最后一行时,我开始加载更多数据。当这些数据进入时,我呼叫insertRowsAtIndexPaths添加行。当插入更多行时,UITableView滚动到顶部

这通常工作(tableview的滚动位置不会改变),但我注意到,如果我overscroll,而不是放手(滚动tableview结束),tableview将跳转到顶部insertRowsAtIndexPaths在数据加载时被调用。

我为我的细胞高度使用UITableViewAutomaticDimension/Autolayout,因为每个细胞根据其包含的数据而有不同的高度。我怎样才能避免这个问题?理想情况下,如果数据加载和tableview过度滚动,一旦数据进来,滚动位置将停留在overscroll上。

+0

我从UITableViewAutomaticDimension切换到计算每带有虚拟单元的行高,此问题不再发生。仍然想知道是否可以使用UITableViewAutomaticDimension解决问题。 – untitled

回答

1

您可以在底部单元格indexpath上创建引用,并在无论哪个函数导致它移动回到顶部,呼叫

[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionNone animated:YES];

SWIFT 3

self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.none, animated: true) 
+0

如果用户在行的中间滚动,是不是会导致tableview捕捉到行的开头? – untitled

+0

我以为只有当用户滚动到底部时才会发生这种情况? – MikeG

+0

如果是这样,当新的行加载时,表视图仍然会捕捉到前一行的权利?我试图得到的行为是tableview停留在overscroll位置,因为新数据加载在先前为过度滚动区域的空间中。作为参考,打开Facebook应用程序并滚动到Feed的底部;如果你过度滚动tableview将停留在帖子加载的位置。 – untitled

相关问题