允许 UIScrollView 滚动过去的内容而不弹跳

Posted

技术标签:

【中文标题】允许 UIScrollView 滚动过去的内容而不弹跳【英文标题】:Allow UIScrollView to Scroll Past Content Without Bouncing 【发布时间】:2014-06-24 19:01:42 【问题描述】:

概述

我正在构建一个应用程序,允许用户将主 UICollectionView 滚动一定量以加载相关内容。过度滚动的触觉体验应该和很多其他ios应用一样会导致当前页面内容刷新,所以我设置了collectionView.bounce = YES

一旦用户滚动指定的数量,我想将当前的UICollectionView向下移动并移出视图,同时将新页面从设备顶部向下移动到视图中,非常类似于文章间Digg iPhone 应用中的导航。

我正在使用UIScrollViewDelegate 方法检测过度滚动:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

    CGFloat offsetY = scrollView.contentOffset.y;
    CGFloat contentHeight = scrollView.contentSize.height;

    if (offsetY < -40)
        [self.delegate overscrolledUp];
    

    if (offsetY - (contentHeight - scrollView.frame.size.height) > 40)
        [self.delegate overscrolledDown];
    

问题

代理负责移动这些UICollectionViews 的框架,但我的问题是,当当前页面向下移动并移出视图(或者如果用户向下滚动时向上移出视图),@ 987654327@ 也将滚动反弹回 (0,0) 的contentOffset。这会导致我想避免的看起来很奇怪的动画。我希望用户能够进行过度滚动,以便显示一个指示符来描述他们可以看到的新内容,但我不希望在换页动画期间反转过度滚动。

问题

有没有办法防止UICollectionView/UIScrollView 在用户滚动内容后将其滚动返回到 (0,0)?

【问题讨论】:

【参考方案1】:

看看

https://github.com/enormego/EGOTableViewPullRefresh

它包含一个拉刷新tableview的代码,你可以直接使用它或者作为灵感来源。

【讨论】:

谢谢!一旦达到阈值,诀窍就是将 scrollView 的 contentInset 设置为偏移量。

以上是关于允许 UIScrollView 滚动过去的内容而不弹跳的主要内容,如果未能解决你的问题,请参考以下文章

缩小 UIScrollView 以专注于某个页面

如何检测用户何时尝试滑动“过去的 UIScrollView 内容偏移”?

允许滚动内容大小等于帧大小

如何使用 uiscrollview 向上滚动?

居中和滚动 UIScrollView 内容,尺寸更大或更小

在 UIScrollView 中滚动而不触发 touchesCancelled