我在滚动顶部时插入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之后但它显示了快速的混蛋,因为它会将你带到桌面顶部,然后突然将其滚动到你的最后位置。
我怎样才能让它顺利进行。
谢谢
答案 0 :(得分:9)
我没有对此进行详尽的测试,但这看起来很有希望:
NSIndexPath
。rectForRowAtIndexPath
。contentOffset
。reloadData
而不是insertSections
(这样可以防止出现震动)。rectForRowAtIndexPath
。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