当 scrollViewDidEndDragging 时 UITableView 滚动到特定点

Posted

技术标签:

【中文标题】当 scrollViewDidEndDragging 时 UITableView 滚动到特定点【英文标题】:UITableView scroll to a specific point when scrollViewDidEndDragging 【发布时间】:2012-05-19 22:38:18 【问题描述】:

我有一个可滚动的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://***.com/a/6392145/120615

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

我希望希望发生的是,当您松开手指时,UITableView 会滚动回顶部,但会在距离顶部 100 点处停止(这样我就可以向用户显示活动指示器) 然后 2/3 秒后完全滚动到顶部。

【问题讨论】:

【参考方案1】:

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

不要使用 DidEndDraging 回调函数,试试这个:

(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

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

【讨论】:

谢谢,当上一个动画完成时会调用它,但我根本不希望它滚动回顶部。我可以以某种方式中断当前动画或更改当前动画吗? jordelver,对不起,这不是您要找的。您应该考虑澄清您要实现的功能。我读了几次,我不清楚你想做什么。 抱歉,我已经更新了帖子,提供了更多信息。如果还不清楚,请告诉我:)

以上是关于当 scrollViewDidEndDragging 时 UITableView 滚动到特定点的主要内容,如果未能解决你的问题,请参考以下文章

更新:为啥当用户是管理员时关系有效,但当普通用户时不会?

当位于顶级栏目显示下级栏目,当位于二级栏目显示同级栏目,当位于三级目录,显示上级栏目

当应用程序在后台时扫描外围设备(例如,当屏幕锁定时)

psp一骑当千交叉冲击金手指

当组长有感

专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)