1

我有一个UITableView可滚动的。当用户滚动UITableView一定量然后松开手指时,我希望它从顶部滚动 50 点,而不是滚动回顶部,有效地在屏幕顶部和最顶部之间留下 50 点的间隙细胞。

目前我已经实现了scrollViewDidEndDragging,但我不知道如何设置视图将滚动回的位置。

我已经尝试了以下方法,但它没有按预期工作。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // If scrolled over 100 points
    if(-100 > (double)self.tableView.contentOffset.y) {
        [self.tableView setContentOffset:CGPointMake(0, -50) animated:YES];
    }
}

上面的代码会导致奇怪的闪烁,就像动画同时运行一样,但我不确定。

任何帮助,将不胜感激。

更新更多信息

我正在根据这篇文章实现“下拉​​刷新”功能: https ://stackoverflow.com/a/6392145/120615

UIView在顶部添加了一个额外的UITableView,当您滚动 时,向下UITableView移动UIView到视图中。当您从屏幕上松开手指时,UITableView滚动回顶部隐藏UIView我添加的新内容。

想要发生的是,当您松开手指时,UITableView滚动回顶部但从顶部停止 100 点(因此我可以向用户显示活动指示器),然后在 2/3 秒后完全滚动到顶部。

4

1 回答 1

2

我认为你是对的,动画是同时运行的,因为滚动视图具有减速功能。

而不是使用 DidEndDraging 回调函数试试这个:

  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

这只会在用户触发的动画完成后调用。

于 2012-05-19T22:54:37.390 回答