【问题标题】:How can insert cells to top in UITableView without moving to top offset如何在 UITableView 中将单元格插入顶部而不移动到顶部偏移
【发布时间】:2015-11-26 02:03:31
【问题描述】:

我们可以将单元格插入到 UITableView 或 UICollectionView 中,如果单元格将插入到中间或底部,我们会感觉平滑并保持在当前偏移量。但是当我在顶部插入时,tableview 或 UICollectionView 将自动移动到偏移零,这意味着我不会停留在我想要的当前可见单元格中。我该如何实现它,是原生特性还是我们必须编写一些复杂的代码? 我看到 FB messenger 或 Skype 应用程序,当滚动到顶部时,将插入新消息,而不会更改当前可见视图。有人建议我解决这个问题吗?

【问题讨论】:

    标签: ios uitableview


    【解决方案1】:

    如果您使用 master-Detail 应用程序创建一个新的简单项目,您可以在插入时看到它不会滚动到顶部,即使您在中间,内容偏移量也只会改变一点(等于新的行高), top 或 bottom 它在顶部插入。 .它使用简单的代码,如

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
        [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    

    现在,即使您不想滚动here 也是不错的解决方案

    //just need check if you already on the top of the tableview that may be first few rows depend on your row height 
    if(self.tableView.contentOffset.y > ONE_OR_X_ROWS_HEIGHT_YOU_DECIDE
    {
    
        self.delayOffset = self.tableView.contentOffset;
        self.delayOffset = CGPointMake(self.delayOffset.x, self.delayOffset.y+ insertedRowCount * ONE_ROW_HEIGHT);
    
        //insert your row here 
    
        [self.tableView setContentOffset:self.delayOffset animated:NO];    
    
    
    }else
    {
        //insert your row here
    
    }
    

    【讨论】:

    • 感谢您的快速回答。在某些情况下,我们在插入时间(动态单元格高度)之前不知道确切的单元格行高。为了确定,我们必须手动计算每个单元格的高度,并且可能会重复 UITableView 的工作。
    • 您是否尝试过第一个解决方案,因为它只滚动一个行高
    • 啊,我想要一个通用的解决方案。因为就我而言,我必须一次批量更新(插入、删除、更新)大量单元格:)。
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    相关资源
    最近更新 更多