您的位置:首页 > 移动开发

iOS开发之解决WebView自适应内容高度

2017-06-21 10:14 561 查看
这段时间写的项目中,有涉及到根据后端上传的表单内容,然后在移动端将内容排版重新展示的功能点,所以小小的写一下解决办法。
首先如果直接进行内容展示,或者进行sizeToFit的操作,那么可能会造成图片超过屏幕大小,字体变得很小的结果,所以这里用到了UIWebView的delegate方法和添加了html的标签语言,使用了javascript操作方法。具体可以研究代码,如下:
//web
-(UIWebView *)detailWebView
{
if (_detailWebView == nil) {
_detailWebView = [UIWebView new];
_detailWebView.delegate = self;
_detailWebView.scrollView.bounces = NO;
_detailWebView.scrollView.showsHorizontalScrollIndicator = NO;
_detailWebView.scrollView.scrollEnabled = NO;
_detailWebView.dataDetectorTypes = UIDataDetectorTypeAll;
[_detailWebView sizeToFit];
}
return _detailWebView;
}
NSString *htmlcontent = [NSString stringWithFormat:@"<head><style>img{max-width:%fpx !important;}</style></head><div id=\"webview_content_wrapper\">%@</div>",f_Device_w-30,detailDic[@"content"]];

[_detailWebView loadHTMLString:htmlcontent baseURL:nil];

#pragma mark ----- webView 的 delegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//获取页面高度(像素)
NSString * clientheight_str = [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"];
float clientheight = [clientheight_str floatValue];
//设置到WebView上
webView.frame = CGRectMake(15, _whereNewsLabel.bottom+10, f_Device_w-30, clientheight);

//下面这样写就是获取到比较准确的内容高度,不需要再进行其他计算了
//获取内容实际高度(像素)
NSString * height_str= [webView stringByEvaluatingJavaScriptFromString: @"document.getElementById('webview_content_wrapper').offsetHeight + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-top'))  + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-bottom'))"];
float height = [height_str floatValue];

//再次设置WebView高度(点)
webView.frame = CGRectMake(15, _whereNewsLabel.bottom+10, f_Device_w-30, height);

if ([self.delegate respondsToSelector:@selector(backWebViewWithHeight:)]) {
[self.delegate backWebViewWithHeight:webView.bottom+5];
}
}

有写代码是我项目中使用的,没有必要用,大家可以根据自己的需要修改,必要的代码上面都有,有问题可以留言,不喜勿喷,谢谢!








内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息