我正在滚动顶部时插入UITableView的新部分(部分包含3个单元格).
[_mainTable beginUpdates];
[_mainTable insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
[_mainTable endUpdates];
Run Code Online (Sandbox Code Playgroud)
部分插入正确.但它需要我的表格顶部,即单元格0或行0.我希望此交易顺利.我可以插入
[_mainTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
Run Code Online (Sandbox Code Playgroud)
在endUpdates之后,它会显示快速的混蛋,因为它会将你带到桌面顶部然后突然滚动到你的最后位置.
我怎样才能让它变得流畅.
谢谢
我没有对此进行详尽的测试,但这看起来很有希望:
NSIndexPath其中一个可见细胞.rectForRowAtIndexPath.contentOffset表格的当前信息.reloadData而不是insertSections(这可以防止滚动).rectForRowAtIndexPath您在第2步中获得的更新.contentOffset通过步骤5和步骤2的结果的差异进行更新.从而:
[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
Run Code Online (Sandbox Code Playgroud)