【问题标题】:Disable dragging past top of UIWebView / UIScrollView (the "Pull to refresh" gesture)禁用拖过 UIWebView / UIScrollView 顶部(“拉动刷新”手势)
【发布时间】:2013-01-06 20:07:00
【问题描述】:

我有一个UIWebView,我希望用户能够向下滚动,然后再次返回,但不能从顶部拉回页面(通常与拉动刷新相关的手势)。我不希望用户在它背后什么都没有的时候拉它,当他们这样做时什么都不会发生。叫我霸道;)

我可以在向上移动并且已经在内容的顶部时禁用滚动,而不影响向下滚动,或者如果不在顶部则向后滚动?

【问题讨论】:

    标签: ios objective-c uiwebview uiscrollview uikit


    【解决方案1】:

    你应该使用:

    webView.scrollView.bounces = NO;
    

    UIWebView 符合 UIScrollViewDelegate。您可以像这样实现委托方法:

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
        //The webview is is scrolling
        int yPosition = [[_webview stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
    
        if([[_webview stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] intValue] - yPosition == _webview.frame.size.height)
        {
            //The user scrolled to the bottom of the webview
            _webview.scrollView.bounces = YES;
        }else if([[_webview stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] intValue] - yPosition > _webview.frame.size.height + 100){
            _webview.scrollView.bounces = NO;
        }
    
    }
    

    我在 Google Drive 上上传了一个 XCode 项目示例: Sample Code

    【讨论】:

    • 您的建议有效,但如果可能的话,我希望视图能够在底部反弹,但不能在顶部反弹。
    • UIWebView 符合 UIScrollViewDelegate。每当您的 webView 滚动时,都会调用此方法: - (void)scrollViewDidScroll:(UIScrollView *)scrollView 然后测试您是否在页面底部,以便启用反弹...
    • 我正在寻找 react native 并且碰到了这个问题,非常感谢 :D
    【解决方案2】:

    使用 StoryBoard,您可以禁用 ScrollView 反弹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2016-02-03
      • 2020-05-14
      相关资源
      最近更新 更多