【问题标题】:Add cells to top of UITableView将单元格添加到 UITableView 的顶部
【发布时间】:2011-12-22 20:13:44
【问题描述】:

我想在不移动可见单元格的情况下向表格视图添加行,类似于 iPhone、Tweetbot 和其他几个的 Twitter。到目前为止,我尝试过的每一种方法最终都可以做到这一点,但在两者之间会做一些时髦的动画。这是当前的解决方案,它移动细胞但最终停留在同一个地方。

- (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];
}

【问题讨论】:

  • 重要的是要注意,如果我删除 endUpdates(和相关的表更新代码)并将其替换为完整的表刷新,它确实有效。但是,这不是很有效。

标签: iphone ios uitableview


【解决方案1】:

刚刚在这里发布了一个带有代码 sn-ps 的答案

Keep uitableview static when inserting rows at the top

基本上:

  • 将滚动偏移量保存在您将调用 beginUpdate: 的位置。
  • 您可以将单元格的高度添加到保存的偏移量中,而不是调用 InsertCell。
  • 在您应该调用 endUpdate: 的地方,调用 reloadData,然后滚动保存的偏移量,没有动画。

【讨论】:

    【解决方案2】:

    试试这个:

    1. 像以前一样记录第一个可见单元格的偏移量
    2. 确保 UITableView 数据源已包含新项目的数据。
    3. 通过UITableViewRowAnimationNone 拨打UITableView 上的-insertRowsAtIndexPaths:withRowAnimation:。您可以一次性指定要插入的所有索引路径。插入的行数必须与新项目的数量相匹配。
    4. 像以前一样拨打-setContentOffset:

    避免在表格视图上调用-beginUpdates-endUpdates-endUpdates 会为原始单元格制作动画。

    似乎单独的 insertRowsAtIndexPaths 可以为单元格设置动画。您可以尝试这样的解决方法:

    for (UITableViewCell *cell in [tableView visibleCells])
    {
      [cell.layer removeAllAnimations];
    }
    

    【讨论】:

    • 即使没有 begin 和 ind 更新,它仍然会为行和内容偏移设置动画。
    【解决方案3】:

    能否重新加载数据源,然后立即调用

    [tableview selectRowAtIndexPath: animated:NO scrollPosition:<#(UITableViewScrollPosition)#>];
    

    您可能需要获取可以使用的当前位置

    [[tableview indexPathsForVisibleRows] objectAtIndex:0];
    

    不过,我还没有对此进行测试,所以我不是 100% 的。

    【讨论】:

    • 即使这确实有效,它也只会在球场上得到它,细胞不会在完全相同的位置。此外,它不起作用。
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2016-05-30
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多