我有一个应用程序,我在UIWebView中呈现本地HTML文件。但是,文件有时很大,并且使用默认滚动速度到达您想要的位置需要很长时间。有没有办法提高UIWebView的垂直滚动速度?
答案 0 :(得分:23)
在iOS 5中,我们可以访问scrollView
的{{1}}属性。
如果您的目标是iOS 5+,您只需致电:
UIWebView
答案 1 :(得分: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 :(得分:2)
搜索响应 -setScrollDecelerationFactor:的UIWebView的子视图(它是UIScroller - 一个私有类,是UIScrollView的唯一子视图)。你会发现它需要为公共UIScrollView类定义相同的减速因子:
- (void)webViewDidFinishLoad:(UIWebView *)aView {
id decelerator = [aView viewWithSelector:@selector(setScrollDecelerationFactor:)];
[decelerator setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal];
}
请注意,我正在使用 viewWithSelector:的方法是我在UIView类别中定义的方法。据推测,如果UIWebView将来发生变化,我的搜索将返回nil,这个方法将成为无操作。
答案 3 :(得分:0)
是否已考虑在重要边界的html中添加#标签?
您实际上可以使用原生用户界面来实现书签或ToC以便于导航,或者只是将链接嵌入到html中的相应目标。
如果你“加快滚动”,你的应用就有可能被拒绝为非标准,因为它可能会混淆那些习惯于使用标准“感觉”滚动网页浏览的用户。
答案 4 :(得分: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);
}