代码之家  ›  专栏  ›  技术社区  ›  thomax

iphone dev:在uiwebview中提高滚动速度?

  •  7
  • thomax  · 技术社区  · 15 年前

    我有一个在uiwebview中呈现本地html文件的应用程序。但是,文件有时很大,使用默认滚动速度到达所需位置需要很长时间。有没有办法提高uiwebview的垂直滚动速度?

    5 回复  |  直到 7 年前
        1
  •  23
  •   biegleux piyush    13 年前

    在ios 5中,我们可以访问 scrollView 财产 UIWebView .

    如果您的目标是iOS 5+,您只需调用:

    webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
    
        2
  •  7
  •   Quotation    13 年前

    找到uiwebview的一个子视图,它是一个uiscrollview,然后设置 减速率 uiScrollViewDecelerationRate正常 . 这使得uiwebview与普通uiscrollview一样快。

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

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

    默认值 减速率 uiwebview的uiscrollview是0.989324,而 uiScrollViewDecelerationRateFast公司 是0.99, uiScrollViewDecelerationRate正常 是0.998。

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

        3
  •  2
  •   MrO    15 年前

    寻找一个 子视图 响应的uiwebview的 -设置滚动减速系数: (它是uiscroller—一个私有类,是uiscrollview的唯一子视图)。您会发现,它采用的减速因子与为public uiscrollview类定义的减速因子相同:

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

    注意我使用的方法 带选择器的视图: 是我在uiview类别中定义的方法。假设,如果将来uiwebview发生变化,我的搜索将返回nil,并且此方法将成为no-op。

        4
  •  0
  •   Jonathan Watmough    15 年前

    有没有考虑过在你的HTML中添加有重要边界的标签?

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

    如果你“加速滚动”,你的应用程序有被拒绝的风险,因为它可能会混淆用户谁是习惯了网页浏览滚动与标准的'感觉'。

        5
  •  0
  •   Prashant Pimpale Dila Gurung    7 年前

    老问题,但这些设置或技巧真的帮助我,即使在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);
    }