我有一个应用程序,在其中使用UIWebView渲染本地HTML文件。然而,这些文件有时很大,使用默认的滚动速度花费很长时间才能到达想要的位置。有没有办法提高UIWebView的垂直滚动速度?
我有一个应用程序,在其中使用UIWebView渲染本地HTML文件。然而,这些文件有时很大,使用默认的滚动速度花费很长时间才能到达想要的位置。有没有办法提高UIWebView的垂直滚动速度?
iOS 5中我们可以访问UIWebView
的scrollView
属性。
如果你的目标是iOS 5或以上版本,你可以简单地调用:
webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
找到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。
搜索UIWebView的子视图,该子视图响应-setScrollDecelerationFactor:方法(它是UIScrollView的唯一子视图且为私有类UIScroller)。你会发现它使用了与公共UIScrollView类相同的减速系数:
- (void)webViewDidFinishLoad:(UIWebView *)aView {
id decelerator = [aView viewWithSelector:@selector(setScrollDecelerationFactor:)];
[decelerator setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal];
}
虽然这是一个老问题,但这些设置或技巧即使在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);
}
你有没有考虑在 HTML 中添加 # 标签来标记重要的边界?
你可以使用本地 UI 实现书签或目录以便更轻松地导航,或者直接在 HTML 中嵌入到相应的目标链接。
如果你“加速滚动”你的应用程序,它可能会被拒绝,因为它不符合标准,这可能会让习惯于 Webview 滚动的用户感到困惑。
for (UIView* subView in self.currentScrollView.subviews) { if ([subView respondsToSelector:@selector(setScrollDecelerationFactor:)]) { [subView setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal];
但是,该条件从未被满足。有什么帮助吗? - Hesham