Ios UITableView滚动时在顶部插入节
在滚动顶部时,我正在UITableView的顶部插入新的部分(部分包含3个单元格)Ios UITableView滚动时在顶部插入节,ios,uitableview,Ios,Uitableview,在滚动顶部时,我正在UITableView的顶部插入新的部分(部分包含3个单元格) [_mainTable beginUpdates]; [_mainTable insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; [_mainTable endUpdates]; 节正确插入。但它把我带到了表格的顶部,即单元格0或行0。我希
[_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之后,它会显示quick jerk,因为它会将您带到桌面顶部,然后突然将其滚动到您的最后一个位置
我怎样才能使它光滑
谢谢我还没有对此进行详尽的测试,但这似乎很有希望:
nsindepath
rectforrowatinexpath
contentOffset
reloadData
,而不是insertSections
(这可以防止不和谐的滚动)rectforrowatinexpath
contentOffset
非常感谢你,伙计。虽然上面的代码很有魅力,但就我个人的理解而言,我并没有得到第5点。为什么我们这里需要旧的长方形?如果你能澄清,我将非常感激it@mann我只是想看看其中一行向下移动了多少。因此,我在插入之前和之后获取可见行的rect,然后使用
y
值之间的差异来调整contentOffset
的值,使行显示在与之前相同的位置。哇,非常感谢,刚刚找到了这个,这正是我需要的。谢谢再次感谢。不确定这是否有助于其他人,但这里有一些额外的注释,帮助我://1获取屏幕上最上面可见行的索引路径(节,行)//2确定该行向下的距离//3在列表中向下滚动的距离//4.5(newIndexPath行)确定刷新后行的索引路径(节,行)。假设:上面只添加了一个部分,对现有部分没有新的更新//5新行到底有多远//6更新contentOffset以将tableview向下移动到故事现在所在的位置
[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