App*_*now 31 iphone cocoa-touch tableview
当我从下面调用以下内容时,当我重新加载表数据时,我试图让UITableview转到页面顶部
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
// A bunch of code …
[TableView reloadData];
}
同样,我还希望能够在重新加载表数据时转到特定的部分.
我尝试放置以下内容,这似乎只适用于重新加载之前和之后的行,但没有任何反应:
[TableView scrollToRowAtIndexPath:0 atScrollPosition:UITableViewScrollPositionTop  animated:YES];
Eri*_*k B 64
这是你可以做到的另一种方式:
Objective-C的
[tableView setContentOffset:CGPointZero animated:YES];
斯威夫特3
tableView.setContentOffset(.zero, animated: true)
可能是最简单,最直接的方式.
pha*_*ann 30
在阅读了这里和其他地方的所有答案之后,我终于找到了一个可靠的解决方案,并且在加载数据后没有显示滚动.我的回答是基于这篇文章和我的观察,如果你使用内容插入,你需要一个负偏移:
func reloadAndScrollToTop() {
    tableView.reloadData()
    tableView.layoutIfNeeded()
    tableView.contentOffset = CGPoint(x: 0, y: -tableView.contentInset.top)
}
sc1*_*c13 20
这对我有用.
tableView.scrollToRow(at: IndexPath.init(row: 0, section: 0), at: .top, animated: true)
rag*_*fin 19
要滚动到特定部分,您需要指定它的索引路径:
NSIndexPath *topPath = [NSIndexPath indexPathForRow:0 inSection:0];
[TableView scrollToRowAtIndexPath:topPath
                 atScrollPosition:UITableViewScrollPositionTop
                         animated:YES];
如果您不确定tableView中的行数.使用以下内容:
NSIndexPath *topPath = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
[TableView scrollToRowAtIndexPath:topPath
                 atScrollPosition:UITableViewScrollPositionTop
                         animated:YES];
Bob*_*aaf 13
没有动画
我在iOS11上,使用带有粘性标题的普通tableview样式,并且在某种程度上我只有这样才能正常工作才能在没有任何奇怪的闪烁/动画行为的重新加载后将tableview真正放在顶部才能按此顺序使用这些方法其中所有这些都是必要的:
[self.tableView setContentOffset:CGPointZero animated:NO];
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
[self.tableView setContentOffset:CGPointZero animated:NO];
我很认真,所有这些都是必要的,尽管看起来第一行根本不相关.哦是的,也很重要,不要用这个:
self.tableView.contentOffset = CGPointZero;
您会认为它与"setContentOffset animated:FALSE"相同,但显然它不是!Apple对此方法的处理方式不同,在我的情况下,只有在使用带动画的完整方法时才有效:FALSE.
动画
我也想用一个很好的滚动动画来尝试这个.内容偏移方法似乎仍然会导致一些奇怪的动画行为.在一些试验和错误之后,我得到这个有一个很好的动画的唯一方法是这些方法按照这个确切的顺序:
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:TRUE];
警告,确保在运行最后一行代码之前至少有一行以避免崩溃:)
我希望有一天能帮助别人!
| 归档时间: | 
 | 
| 查看次数: | 23767 次 | 
| 最近记录: |