如何检测Scrollview反弹 - iOS

Don*_*yck 14 delegates uiscrollview ios

我想在UIScrollview上实现"pull down to refresh"类型效果.在检测到滚动视图的"顶部"反弹时,视图应刷新一些组件.如何检测UIScrollview的"顶部反弹"?我尝试了委托"scrollViewWillBeginDragging",但没有奏效.

rde*_*mar 15

实现scrollViewDidScroll:,并检查scrollView.contentOffset.y的值 - 当你向下拉时它将是负数,并在它反弹时返回0(或接近0).根据您要满足的条件进行刷新,您可以在该值达到特定负值时设置一个标志,然后在它返回到接近0时进行刷新.这样的事情:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y < -50) _metNegativePullDown = YES;

    if (fabs(scrollView.contentOffset.y) < 1 && _metNegativePullDown) {
        //do your refresh here
        _metNegativePullDown = NO;
    }
}
Run Code Online (Sandbox Code Playgroud)


bug*_*ibu 6

作为记录,我正在使用以下类别在Swift 4上检测到两个反弹:

extension UIScrollView {
    var isBouncing: Bool {
        var isBouncing = false
        if contentOffset.y >= (contentSize.height - bounds.size.height) {
            // Bottom bounce
            isBouncing = true
        } else if contentOffset.y < contentInset.top {
            // Top bounce
            isBouncing = true
        }
        return isBouncing
    }
}
Run Code Online (Sandbox Code Playgroud)

要考虑的事情

  • 在这种情况下,我只是检查顶部内容插入,如果要使用底部插入,则必须进行一些调整
  • 如果您的滚动视图是viewcontroller视图的直接子视图,并且具有对超级视图的顶部约束,而不是顶部安全区域裕度,那么这将不是完美的技巧,将需要进行更多调整