關於UItableViewCell上載入UIWebView自適應高度問題
我們知道所有的關於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=[[UIWebViewalloc]initWithFrame:CGRectMake(10, 35, 320-32, 20)];
[tempWebView loadHTMLString:model.borrowdetailbaseURL:nil];
tempWebView.delegate=self;
tempWebView.backgroundColor = [UIColorclearColor];
tempWebView.scalesPageToFit
tempWebView.scrollView.pagingEnabled = NO;
[self.viewaddSubview: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){
[selfcreatTableView];
[selfcreatTelephoneView];
}else
{
[self.baseTableViewreloadData];
}
}
這裡值得注意的問題是 必須將UIWebView add到另一個view上UIWebview的代理方法才能返回高度 否則 UIWebView將計算不出來的高度