将单元格添加到UITableView顶部
我想向不添加可见单元格的表格视图添加行,这与iPhone的Twitter,Tweetbot和其他几个类似。我迄今为止尝试过的每种方法最终都可以实现,但它们之间会做出时髦的动画。这是目前的解决方案,它可以移动单元格,但最终会停留在同一个地方。将单元格添加到UITableView顶部
- (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];
}
你能不能重新加载数据源,并立即拨打
[tableview selectRowAtIndexPath: animated:NO scrollPosition:<#(UITableViewScrollPosition)#>];
你可能需要获得当前位置,你可以用
我没有做虽然测试了这一点,所以我不是100%。
即使这样做确实有效,它只会在大球场上出现,但这个单元并不会在同一个位置。此外,它不起作用。 –
试试这个:
- 记录偏移到第一个可见的细胞像以前一样
- 确保UITableView的数据源已经包含了对新项目的数据。
- 致电
-insertRowsAtIndexPaths:withRowAnimation:
在UITableView
与UITableViewRowAnimationNone
。您可以指定要一次插入的所有索引路径。插入的行数必须与新项目的数量相匹配。 - 呼叫
-setContentOffset:
就像避免对表视图调用-beginUpdates
和-endUpdates
前
。 -endUpdates
会导致为原始单元格完成动画。
似乎只有insertRowsAtIndexPaths可以动画单元格。你可以尝试一种解决方法是这样的:
for (UITableViewCell *cell in [tableView visibleCells])
{
[cell.layer removeAllAnimations];
}
即使没有开始和ind更新它仍然动画行和内容偏移量。 –
刚刚张贴在这里的代码片断
Keep uitableview static when inserting rows at the top
基本上是一个答案:
- 保存滚动偏移量,你会叫的BeginUpdate :。
- 代替调用InsertCell,将单元格的高度添加到保存的偏移量。
- 如果您要调用endUpdate:,请调用reloadData,然后使用NO动画滚动保存的偏移量。
重要的是要注意,如果我删除endUpdates(和相关的表更新代码)并将其替换为完整的表刷新,它确实有效。但是,这不是非常有效。 –