1.webview加载表格遇到了问题,表格超出了当前的视图范围。
2.我设置[_webView setScalesPageToFit:YES];
3.但是自动缩小了。。。FK
4.解决办法是不要[_webView setScalesPageToFit:YES];
5.要计算body的宽度 NSString *bodyWidth= [webView stringByEvaluatingJavaScriptFromString: @"document.body.scrollWidth"];
6.然后重新load一遍html。。。。。but,问题又出现了,如果内容超出了屏幕高度,重新load以后就不能往下滑动加载数据了,方大webview就展示正常了。。。。好诡异。。。。fk
7.so,我创建了2个大小位置一样的webview A和B,A,hide,用来获取宽度,B用于展示真是数据。。
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
if (webView == self.tmpWebview) {
//webview中表格太宽,所以这里设置2个webview,一个是临时的webview,用来计算宽度比例,用于真实的webview家在初始化比例
//js获取body宽度
NSString *bodyWidth= [webView stringByEvaluatingJavaScriptFromString: @"document.body.scrollWidth"];
int widthOfBody = [bodyWidth intValue] + 15;
//获取实际要显示的html
NSString *html = [self htmlAdjustWithPageWidth:widthOfBody
html:self.htmlBody
webView:webView];
//加载实际要现实的html
[self.webView loadHTMLString:html baseURL:nil];
}
}
//获取宽度已经适配于webView的html。这里的原始html也可以通过js从webView里获取
- (NSString *)htmlAdjustWithPageWidth:(CGFloat )pageWidth
html:(NSString *)html
webView:(UIWebView *)webView
{
NSMutableString *str = [NSMutableString stringWithString:html];
//计算要缩放的比例
CGFloat initialScale = webView.frame.size.width/pageWidth;
//将</head>替换为meta+head
NSString *stringForReplace = [NSString stringWithFormat:@"<meta name=\"viewport\" content=\" initial-scale=%f, minimum-scale=0.1, maximum-scale=2.0, user-scalable=yes\"></head>",initialScale];
NSRange range = NSMakeRange(0, str.length);
//替换
[str replaceOccurrencesOfString:@"</head>" withString:stringForReplace options:NSLiteralSearch range:range];
return str;
}
参考