我们知道所有的关于UI的加载都是在主线程中完成的,而在UITableView中cell的自适应高度经常用的方案是在cell height代理方法中调用cellforRowAtIndexPath代理方法 返回高度的 如果在cell上再加载UIWebView的时候 UiWebView的自适应高度也是在UIWebView的代理方法中完成的。这样的话在cellForrow代理方法中加载UIWebview的时候就会出现一个死循环 在IOS7.0以前 可以再Webview的代理方法中用tableview的reloadData方法 刷新 但是IOS8.0就不行了。
这里我的方法是写个方法直接算出UiWebview的高度以后再加载UItableView
-(void)creatWebViewForEvaluateHeight
{
UIWebView * tempWebView=[[UIWebView alloc]initWithFrame:CGRectMake(10, 35, 320-32, 20)];
[tempWebView loadHTMLString:model.borrowdetail baseURL:nil];
tempWebView.delegate=self;
tempWebView.backgroundColor = [UIColor clearColor];
tempWebView.scalesPageToFit = NO; //禁止用户缩放页面
tempWebView.scrollView.pagingEnabled = NO;
[self.view addSubview:tempWebView];
tempWebView.alpha=1.0f;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//字体大小
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '100%'"];
//字体颜色
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextFillColor= 'black'"];
//页面背景色
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.background='#fafafa'"];
CGRect frame = webView.frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
webViewFrame=frame;
[webView removeFromSuperview];
if (self.baseTableView==nil){
[self creatTableView];
[self creatTelephoneView];
}else
{
[self.baseTableView reloadData];
}
}
这里值得注意的问题是 必须将UIWebView add到另一个view上UIWebview的代理方法才能返回高度 否则 UIWebView将计算不出来的高度