【问题标题】:iPhone dev: Increase scroll speed in UIWebView?iPhone 开发人员:提高 UIWebView 中的滚动速度?
【发布时间】:2011-02-16 10:43:26
【问题描述】:

我有一个应用程序,可以在 UIWebView 中呈现本地 HTML 文件。但是,这些文件有时很大,并且使用默认滚动速度到达您想要的位置需要很长时间。有什么办法可以提高 UIWebView 的垂直滚动速度?

【问题讨论】:

    标签: iphone cocoa-touch uiwebview scroll


    【解决方案1】:

    搜索 UIWebView 的 子视图,它响应 -setScrollDecelerationFactor:(它是 UIScroller - 一个私有类,它是 UIScrollView 的唯一子视图)。您会发现它采用了为公共 UIScrollView 类定义的相同减速因子:

    - (void)webViewDidFinishLoad:(UIWebView *)aView {
        id decelerator = [aView viewWithSelector:@selector(setScrollDecelerationFactor:)];
        [decelerator setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal];
    }
    

    注意我使用的方法viewWithSelector:是我在UIView的一个类别中定义的方法。想必以后如果 UIWebView 发生变化,我的搜索会返回 nil,这个方法就会变成 no-op。

    【讨论】:

    • 我无法做到这一点。我使用以下代码:for (UIView* subView in self.currentScrollView.subviews) { if ([subView respondsToSelector:@selector(setScrollDecelerationFactor:)]) { [subView setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal]; 但这种情况永远不会成立。有什么帮助吗?
    • 我的 -viewWithSelector: 方法遍历子视图之外的视图层次结构。 UIScroller 可能不是 UIWebView 的直接后代,因此您的代码找不到它。
    • 这会让你的应用被拒绝。
    • 我会看看在这几年中是否出现了替代解决方案。根据您是在网页视图还是滚动视图中,相同的滑动物理动作碰巧会导致两种不同的体验,这对工具包来说是一个缺点。
    • 向 Apple 提交了一个错误:参考。不。 11322967
    【解决方案2】:

    是否考虑在您的 html 中的重要边界处添加 # 标签?

    您实际上可以使用本机 UI 来实现书签或 ToC 以便于导航,或者直接在您的 html 中嵌入指向适当目标的链接。

    如果您“加速滚动”,您的应用可能会因为不标准而被拒绝,因为这可能会使习惯于 web 视图滚动的用户与标准“感觉”混淆。

    【讨论】:

      【解决方案3】:

      找到 UIWebView 的一个子视图,它是一个 UIScrollView,然后将 decelerationRate 设置为 UIScrollViewDecelerationRateNormal。这使得 UIWebView 和普通 UIScrollView 一样快。

      在 iOS 4/5 中,我们可以简单地使用 UIWebView 的最后一个子视图。

      UIScrollView *scroll = [webView.subviews lastObject];
      if ([scroll isKindOfClass:[UIScrollView class]]) {
          scroll.decelerationRate = UIScrollViewDecelerationRateNormal;
      }
      

      UIWebView的UIScrollView默认decelerationRate是0.989324,而UIScrollViewDecelerationRateFast是0.99,UIScrollViewDecelerationRateNormal是0.998。

      此方法不使用任何私有 API。

      【讨论】:

        【解决方案4】:

        在 iOS 5 中,我们可以访问 UIWebViewscrollView 属性。

        如果你的目标是 iOS 5+,你可以简单地调用:

        webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
        

        【讨论】:

          【解决方案5】:

          老问题,但即使在 2018 年,这些设置或技巧也确实帮助了我。

          按照这些简单的编码技巧来提高 Android WebView 的性能:

          WebView mWebView = new WebView(this);
          WebSettings settings = mWebView.getSettings();
          settings.setSupportZoom(true);
          settings.setBuiltInZoomControls(false);
          settings.setJavaScriptEnabled(true);
          settings.setLoadWithOverviewMode(true);
          settings.setUseWideViewPort(true);
          mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
          mWebView.setScrollbarFadingEnabled(true);
          settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
          settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
          settings.setDomStorageEnabled(true);
          
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
          
              mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
          
          } else {
          mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多