//***************方法一***************//
[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
//***************方法二:偏移量***************//
[self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
//***************方法三:cell的位置***************//
NSIndexPath* indexPat = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPat atScrollPosition:UITableViewScrollPositionBottom animated:YES];
// 注意添加判断:是否有section为0的这个section
if ([self.tableView numberOfRowsInSection:0]) {
NSIndexPath *indexPathOne = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPathOne atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
方法四:
这种方法比较通用,有没有 tableHeaderView 都可以,不过缺点是这里的 animated 一定要为 NO,否则某些情况下不生效。
[UIView animateWithDuration:0 animations:^{
[self.tableView setContentOffset:CGPointZero animated:NO];
} completion:^(BOOL finished) {
[self.tableView reloadData];
}];
⚠️WARRING:
方案2 有一个隐藏问题。回滚到最前面时,你的 tableView 会加载前面的cell,这时候会调用 cellForRowAtIndexPath,以及 heightForRowAtIndexPath 等代理方法;但是在这之前,你可能已经删掉了 dataSource 里的数据,或者更换了 dataSource 里的数据,那么从 dataSource 数组取值时候,很可能会出现数组越界现象。
所以,建议一定要加好数组越界的判定处理啊!!!
作者:我叫没名字啊
链接:https://www.jianshu.com/p/e0684c461388
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论