? 最近遇到了一些有趣的問(wèn)題 分享一下 ,同時(shí)也是對(duì)自己的問(wèn)題進(jìn)行總結(jié)? ?
之前用過(guò)的webview 主要是兩種,一種是加載網(wǎng)頁(yè)? 一種是加載HTML 還有其他的 沒(méi)接觸 這里不談
這次的需求的是在原生中間加一個(gè)webview 效果如圖1.0
HTML長(zhǎng)度不確定? 這個(gè)時(shí)候就需要自適應(yīng)行高?
自適應(yīng)行高 這個(gè)問(wèn)題 可行的方案有兩種?
首先設(shè)置webview 的代理? ,有一個(gè)代理方法? 如下
- (void)webViewDidFinishLoad:(UIWebView *)webView? 這個(gè)方法里設(shè)置行高? 但是要注意一點(diǎn)? 整個(gè)視圖的行高要在這里設(shè)置? ,能在其他地方設(shè)置 要不然會(huì)有問(wèn)題 ,例如刷新行高自動(dòng)增加(我就遇到過(guò)).
自適應(yīng)行高? 第一種方法? 就是先把行高設(shè)置成0? 然后通過(guò)sizeThatFits 獲取真實(shí)行高?
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
NSLog(@"===%f",fittingSize.height);
第二種方式? 是執(zhí)行JS語(yǔ)句 獲取行高
CGFloat webViewHeight = [[headView.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
NSLog(@"--->%.f",webViewHeight);
后來(lái)我分別用了這兩個(gè)方法? 分別發(fā)現(xiàn)了坑點(diǎn)?
后臺(tái)數(shù)據(jù)有一個(gè)HTML特別的長(zhǎng) 5000多
就是在這里出現(xiàn)了問(wèn)題?
第一次加載的時(shí)候 :
? ? ? 第一種方法 行高是1
? ? ? 第二種方法? 行高是正確行高
刷新頁(yè)面之后? :
? ? 第一種方法是正確行高?
第二種方法? JS語(yǔ)句的 行高竟然多了 50 ,就是說(shuō)整個(gè)視圖 多了一塊黑色
對(duì)于如何處理這個(gè)問(wèn)題?
第一種行高的方法 就是初始化設(shè)置一個(gè)小的行高 這個(gè)改變不了?
第二種方法 是JS注入? 本人對(duì)JS真的不懂 為什么會(huì)出現(xiàn)這個(gè)問(wèn)題? (數(shù)值會(huì)增大)真的不懂
這邊又著急上線? 情急之下 是這樣解決的
給控制器加一個(gè)屬性
@property (assign, nonatomic) BOOL isFirst;
- (void)viewDidLoad {
self.isFirst = YES;
}
代理方法里這樣寫
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
NSLog(@"===%f",fittingSize.height);
CGFloat webViewHeight = [[headView.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
NSLog(@"--->%.f",webViewHeight);
if ( self.isFirst? ? ) {
self.isFirst =NO;
headView.frame = CGRectMake(0, 0, kWidth, 100 +webViewHeight);
}else{
headView.frame = CGRectMake(0, 0, kWidth, 100 +fittingSize.height);
}
[self.CulturePageInfoTableView reloadData];
}
整體的思路就是? 第一次加載的時(shí)候 調(diào)用JS注入的方法? 之后調(diào)用 sizeThatFits的方法?
其實(shí) 這個(gè)只是解決問(wèn)題的方式 但是問(wèn)題的原理 不清楚 如果有知道原理的小伙伴 分享一下 謝謝 嘿嘿