gpt4 book ai didi

ios - UITableView 在滚动时在顶部插入部分

转载 作者:可可西里 更新时间:2023-11-01 03:29:37 26 4
gpt4 key购买 nike

我在滚动顶部时在 UITableView 顶部插入新部分(部分包含 3 个单元格)。

      [_mainTable beginUpdates];
[_mainTable insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
[_mainTable endUpdates];

部分正确插入。但它把我放在表的顶部,即第 0 单元格或第 0 行。我希望此交易顺利进行。我可以插入

[_mainTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1] atScrollPosition:UITableViewScrollPositionBottom animated:NO];

在 endUpdates 之后,但它显示快速 SCSS ,因为它会将您带到表格的顶部,然后突然将其滚动到您的最后一个位置。

我怎样才能使它平滑。

谢谢

最佳答案

我还没有对此进行详尽的测试,但这似乎很有希望:

  1. 识别其中一个可见单元格的 NSIndexPath
  2. 获取它的 rectForRowAtIndexPath
  3. 获取表本身的当前 contentOffset
  4. 添加该部分,但调用 reloadData 而不是 insertSections(这样可以防止不和谐的滚动)。
  5. 获取您在第 2 步中获取的更新后的 rectForRowAtIndexPath
  6. 用第 5 步和第 2 步的结果之差更新 contentOffset

因此:

[self.sections insertObject:newSection atIndex:0];  // this is my model backing my table

NSIndexPath *oldIndexPath = self.tableView.indexPathsForVisibleRows[0]; // 1
CGRect before = [self.tableView rectForRowAtIndexPath:oldIndexPath]; // 2
CGPoint contentOffset = [self.tableView contentOffset]; // 3
[self.tableView reloadData]; // 4
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:oldIndexPath.row inSection:oldIndexPath.section + 1];
CGRect after = [self.tableView rectForRowAtIndexPath:newIndexPath]; // 5
contentOffset.y += (after.origin.y - before.origin.y);
self.tableView.contentOffset = contentOffset; // 6

关于ios - UITableView 在滚动时在顶部插入部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18164519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com