iPhone开发:如何增加UIWebView中的滚动速度?

7

我有一个应用程序,在其中使用UIWebView渲染本地HTML文件。然而,这些文件有时很大,使用默认的滚动速度花费很长时间才能到达想要的位置。有没有办法提高UIWebView的垂直滚动速度?

5个回答

22

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

如果你的目标是iOS 5或以上版本,你可以简单地调用:

webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;

7

找到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。


2

搜索UIWebView的子视图,该子视图响应-setScrollDecelerationFactor:方法(它是UIScrollView的唯一子视图且为私有类UIScroller)。你会发现它使用了与公共UIScrollView类相同的减速系数:

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

请注意,我使用的方法viewWithSelector:是我在UIView的类别中定义的方法。假设如果UIWebView在将来发生更改,则我的搜索将返回nil,并且此方法将变为无操作。

我无法完成这个任务。我使用了以下代码:for (UIView* subView in self.currentScrollView.subviews) { if ([subView respondsToSelector:@selector(setScrollDecelerationFactor:)]) { [subView setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal];但是,该条件从未被满足。有什么帮助吗? - Hesham
我的-viewWithSelector:方法遍历了超出子视图的视图层次结构。UIScroller可能不是UIWebView的直接后代,因此您的代码找不到它。 - MrO
这会导致您的应用被拒绝。 - Or Arbel
我会看一下,看看在这些年里是否出现了替代方案。这是一个问题,因为在网页视图或滚动视图中进行相同的物理操作会导致两种不同的体验。 - MrO
已向苹果报告此问题:参考编号11322967。 - MrO

0

虽然这是一个老问题,但这些设置或技巧即使在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);
}

0

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

你可以使用本地 UI 实现书签或目录以便更轻松地导航,或者直接在 HTML 中嵌入到相应的目标链接。

如果你“加速滚动”你的应用程序,它可能会被拒绝,因为它不符合标准,这可能会让习惯于 Webview 滚动的用户感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接