我有一个最初有20个元素的tableview数据源。稍后,数据源将使用更多元素进行更新。要更新tableview,我调用tableview重新加载。当它被调用时,滚动位置突然改变。有没有办法可以阻止它滚动并让它保持在我看的位置?
所以我发现了为什么滚动发生了。我已经实现了heightForRowAtIndex,当我评论它时,表视图不会自动滚动。但我仍然没有找到解决方案
答案 0 :(得分:0)
我认为你的描述错了..我试着按照你说的做,我创建了一个包含20个元素的表视图,添加了一个添加20个元素的按钮,并调用了#34; reloadData"。结果是表格没有移动或滚动。新数据被添加到表的末尾。我滚动到桌子的末尾后看到了它。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.arr = [NSMutableArray new];
for (self.i=0; self.i<10; self.i++) {
[self.arr addObject:[NSString stringWithFormat:@"%d",self.i]];
}
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arr.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[cell.textLabel setText:self.arr[indexPath.row]];
return cell;
}
- (IBAction)addMoreDataToArr:(id)sender {
int oldI = self.i;
for (self.i = self.i; self.i<oldI+10; self.i++) {
[self.arr addObject:[NSString stringWithFormat:@"%d",self.i]];
}
[self.tableView reloadData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
仅供参考:这是非常糟糕的代码:)它仅适用于POC!