当添加更多元素和可变单元格高度的数据源时,UITableView会滚动

时间:2015-10-21 06:00:52

标签: ios uitableview scroll

我有一个最初有20个元素的tableview数据源。稍后,数据源将使用更多元素进行更新。要更新tableview,我调用tableview重新加载。当它被调用时,滚动位置突然改变。有没有办法可以阻止它滚动并让它保持在我看的位置?

所以我发现了为什么滚动发生了。我已经实现了heightForRowAtIndex,当我评论它时,表视图不会自动滚动。但我仍然没有找到解决方案

1 个答案:

答案 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!