Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更新数据后setContentOffset不工作_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 更新数据后setContentOffset不工作

Ios 更新数据后setContentOffset不工作,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个UITableViewController,当用户滚动到顶部时,我希望在第一个单元格上方添加一组单元格,而不影响当前滚动位置(就像iMessage一样) 我知道我可以使用insertRowsAtIndexPaths来完成这项工作,而无需重新加载数据,但我只想先以最简单的方式完成。因此,我将覆盖数据并调用reload,然后调用setContentOffset,但无论我将偏移量设置为什么,表总是返回顶部 // in an NSNotification handler //... dispat

我有一个
UITableViewController
,当用户滚动到顶部时,我希望在第一个单元格上方添加一组单元格,而不影响当前滚动位置(就像iMessage一样)

我知道我可以使用
insertRowsAtIndexPaths
来完成这项工作,而无需重新加载数据,但我只想先以最简单的方式完成。因此,我将覆盖数据并调用
reload
,然后调用
setContentOffset
,但无论我将偏移量设置为什么,表总是返回顶部

// in an NSNotification handler
//...
dispatch_async(dispatch_get_main_queue(), ^{

  // get old content height
  CGSize oldContentSize = self.tableView.contentSize;
  NSLog(@"old content height: %f", oldContentSize.height);

  // update tableView data
  self.messages = updatedMessages;
  [self.tableView reloadData];

  // get new content height
  CGSize newContentSize = self.tableView.contentSize;
  NSLog(@"new content height: %f", newContentSize.height);

  // move to user scroll position
  CGPoint newContentOffset = CGPointMake(0, newContentSize.height - oldContentSize.height);
  [self.tableView setContentOffset:newContentOffset];
});
当我运行此命令时,我得到:

old content height: 557.765625
new content height: 1249.050781
但是tableView会恢复到顶部,而不是保持其滚动位置

我发现如果我调用
[self.tableView setContentOffset:newContentOffset动画:YES]它总是向下滚动到正确的位置,但移动是不可接受的

如何在重新加载tableView数据后保持滚动位置

我看过这些:

但是他们的解决方案在我的情况下不起作用。

试试这个

[self.tableView setContentOffset:newContentOffset animated:NO]

[self.tableView setContentOffset:newContentOffset动画:否];;如果您更新itOk,我将接受您的回答,非常感谢:)