
因为需求,所以在XML布局中,设置WebView高度为wrap_content(自适应),但是页面加载内容存在视频,视频全屏后,页面存在留白。
我的思路是在页面加载完成的时候,修改webview的高度。
所以我们设置WebViewClient监听,在onPageFinished方法中,通过重新设置LayoutParams去修改webview的高度。
如果单纯只是视频全屏,没有其他 *** 作,这种应该是满足了。但是我还有字体大小变化,所以还是有问题,最后采用办法还是通过JS,告诉客户端页面高度,然后通过LayoutParams设置。
一 在UIWebView中使用flashScrollIndicators
使用UIScrollView时,我们可以使用flashScrollIndicators方法显示滚动标识然后消失,告知用户此页面可以滚动,后面还有更多内容。UIWebView内部依赖于UIScrollView,但是其没有flashScrollIndicators方法,但可以通过其他途径使用此方法,如下所示。
for (id subView in [webView subviews]) { if ([subView respondsToSelector:@selector(flashScrollIndicators)]) { [subView flashScrollIndicators]; } }
上述代码片段可以到webViewDidFinishLoad回调中使用,加载完网页内容后flash显示滚动标识。
二去除UIWebView的背景阴影
假设一个UIWebView是白底黑字的,当用户拖动UIWebView时,会看到后面的背景阴影,如下图所示。
可以使用下述代码去除阴影,并将背景设为白色。
if ([[webView subviews] count] > 0) { // hide the shadows for (UIView shadowView in [[[webView subviews] objectAtIndex:0] subviews]) { [shadowView setHidden:YES]; } // show the content [[[[[webView subviews] objectAtIndex:0] subviews] lastObject] setHidden:NO]; } webViewbackgroundColor = [UIColor whiteColor];
使用此代码后的拖动效果如图所示。
三根据内容获取UIWebView的高度
有时候需要根据不同的内容调整UIWebView的高度,以使UIWebView刚好装下所有内容,不用拖动,后面也不会留白。有两种方式可根据加载内容获取UIWebView的合适高度,但都需要在网页内容加载完成后才可以,即需要在webViewDidFinishLoad回调中使用。
1使用sizeThatFits方法。这样就可以用手指来控制网页的放大缩小了。
- (void)webViewDidFinishLoad:(UIWebView )webView { CGRect frame = webViewframe; framesizeheight = 1; webViewframe = frame; CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; framesize = fittingSize; webViewframe = frame; }
sizeThatFits方法有个问题,如果当前UIView的大小比刚好合适的大小还大,则返回当前的大小,不会返回最合适的大小值,所以使用sizeThatFits前,先将UIWebView的高度设为最小,即1,然后再使用sizeThatFits就会返回刚好合适的大小。
2使用JavaScript
- (void)webViewDidFinishLoad:(UIWebView )webView { CGRect frame = webViewframe; NSString fitHeight = [webview stringByEvaluatingJavaScriptFromString:@"documentbodyscrollHeight;"]; framesizeheight = [fitHeight floatValue]; webViewframe = frame; }
使用UIWebView的stringByEvaluatingJavaScriptFromString方法,执行JavaScript语句documentbodyscrollHeight;可获取当前网页正文的全文高,测试时曾错误的使用了documentbodyoffsetHeight。
3限制
这两种方法都只能在加载网页完成时才能使用,当在UITableView中的UITableViewCell包含UIWebView时,无法在tableView:heightForRowAtIndexPath:中获取到UIWebView最合适的高度,也就无法确定UITableViewCell的合适高度。 Any Ideas
final DisplayMetrics metrics = getResources()getDisplayMetrics();mDistanceToTriggerSync = (int) Mathmin(((View) getParent())getHeight() MAX_SWIPE_DISTANCE_FACTOR, REFRESH_TRIGGER_DISTANCE metricsdensity);
webview的高度是应该固定的,显示的html如果超过webview的高度可以滚屏显示。如果是想html的高度是多高,webview就多高,那你应该问的是这个问题如果是,可以参考:
首先是滑动到底部记得需要(int)(mWebviewgetContentHeightmWebViewgetScale())强转正int型去掉后面的小数点
mWebviewgetContentHeight:得到mWebview的内容高度,由于mWebview有缩放因此需要乘以他的缩放值mWebViewgetScale()
mWebViewgetHeight():当前mWebView显示的高度
mWebViewgetScrollY():mWebView竖直方向上滚动的高度,若为0说明滚动条在顶部了!
需要添加宽度设置。webviewhtml的超过高度想要显示内容需要添加宽度,因此webviewhtml超过高度不显示需要添加宽度设置。webviewhtml是一个基于webkit的引擎,可以解析DOM元素,展示html页面的控件。
以上就是关于解决:WebView高度自适应,视频全屏后,页面留白问题全部的内容,包括:解决:WebView高度自适应,视频全屏后,页面留白问题、qwebview怎样调整加载的网页的大小、android 怎样计算webview高度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)