ios – 如何在滚动时在表视图中插入表格视图单元格?

我目前正在处理UITableView实例中显示的数据流.表视图顶部添加了新项目.

我面临的问题是,当新项目添加到表格视图时,可以看到动画和手势的轻微中断.当拖动(动画)之后表格视图减速时以及拖动表格视图时都会发生打嗝.

到目前为止,我已经尝试删除任何插入动画,并通过更新表视图的contentOffset来补偿插入.这些方法似乎都不起作用.

最佳答案
我刚刚想出了这个问题.当它到达最后一行时,我试图向tableView添加新行.您无论何时何时都无法执行此操作,或者您最终会在tableView动画中出现断断续续的动画或突然停止.

我发现在动画(或用户拖动手势)结束之前你无法启动beginAnimations / endAnimations块.要实现此目的,您必须检查两种方法:

– (void)scrollViewDidEndDragging:willDecelerate ::这将告诉你用户何时停止拖动tableView,可能在tableView的末尾.如果willDecelerate为NO,那就是告诉你用户将手指“握住”在tableView上并刚刚解除它.这是添加行的好地方.您可以下载Twitter应用程序以查看此示例.试着把手指放在最后一排.在您解除推文之前,该应用不会更新推文.

– (void)scrollViewDidEndDecelerating:这将告诉您用户触摸了表视图并且正在减速,可能是在表视图的末尾.这是一个更新tableView的好地方.

看看这个代码示例:

-(void)shouldUpdateOnScrollView:(UIScrollView*)scrollView{
    // Check if we are at the end of the tableView
    CGFloat currentOffset = scrollView.contentOffset.y;
    CGFloat maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;

    // Change 10.0 to adjust the distance from bottom you want to check for
    if (maximumOffset - currentOffset <= 10.0) {
        // Do not throw an update if we are just updating
        if (!_loading &&  !_allDownloaded) {
            _loading = YES;
            // dispatch_async just to not break the current animation
            dispatch_async(dispatch_get_main_queue(), ^{
                [self obtainNextPostsFromBegining:NO];
            });

        }
    }
}


-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"%@ %@",NSStringFromSelector(_cmd),decelerate?@"YES":@"NO");
    if (!decelerate) {
        // the user has just lifted it's finger. Check if we have to update
        [self shouldUpdateOnScrollView:scrollView];
    }

}

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
        NSLog(@"%@",NSStringFromSelector(_cmd));
    // the tableView has just stopped. Check if we have to update
    [self shouldUpdateOnScrollView:scrollView];
}

转载注明原文:ios – 如何在滚动时在表视图中插入表格视图单元格? - 代码日志