我想在不移动可见单元格的情况下向表格视图中添加行,类似于Twitter for iPhone,Tweetbot和其他几个。到目前为止,我尝试过的每一种方法最终都能实现这一目标,但两者之间却采用了时髦的动画。这是目前的解决方案,它可以移动细胞但最终会停留在同一个地方。
- (void)controllerDidChangeContent:(NSFetchedResultsController*)controller
{
UITableViewCell *referenceCell;
if ([self.tableView.visibleCells count] > 0) {
referenceCell = [self.tableView.visibleCells lastObject];
}
CGFloat offset = referenceCell.frame.origin.y - self.tableView.contentOffset.y;
[self.tableView endUpdates];
[self.tableView setContentOffset:CGPointMake(0.0, referenceCell.frame.origin.y - offset) animated:NO];
}
答案 0 :(得分:1)
试试这个:
-insertRowsAtIndexPaths:withRowAnimation:
在UITableView
上致电UITableViewRowAnimationNone
。您可以指定要一次插入的所有索引路径。插入的行数必须与新项目的数量相匹配。-setContentOffset:
避免在表格视图中调用-beginUpdates
和-endUpdates
。 -endUpdates
会导致原始单元格完成动画。
似乎insertRowsAtIndexPaths单独可以为单元格设置动画。您可以尝试这样的解决方法:
for (UITableViewCell *cell in [tableView visibleCells])
{
[cell.layer removeAllAnimations];
}
答案 1 :(得分:0)
您可以重新加载数据源,然后立即调用
[tableview selectRowAtIndexPath: animated:NO scrollPosition:<#(UITableViewScrollPosition)#>];
你可能需要获得你可以用
做的当前位置[[tableview indexPathsForVisibleRows] objectAtIndex:0];
我没有测试过这个,所以我不是百分之百。
答案 2 :(得分:0)
刚刚在这里发布了代码片段的答案
Keep uitableview static when inserting rows at the top
基本上: