? 最近遇到了一些有趣的問題 分享一下 ,同時也是對自己的問題進行總結(jié)? ?
之前用過的webview 主要是兩種,一種是加載網(wǎng)頁? 一種是加載HTML 還有其他的 沒接觸 這里不談
這次的需求的是在原生中間加一個webview 效果如圖1.0

HTML長度不確定? 這個時候就需要自適應行高?
自適應行高 這個問題 可行的方案有兩種?
首先設置webview 的代理? ,有一個代理方法? 如下
- (void)webViewDidFinishLoad:(UIWebView *)webView? 這個方法里設置行高? 但是要注意一點? 整個視圖的行高要在這里設置? ,能在其他地方設置 要不然會有問題 ,例如刷新行高自動增加(我就遇到過).
自適應行高? 第一種方法? 就是先把行高設置成0? 然后通過sizeThatFits 獲取真實行高?
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語句 獲取行高
CGFloat webViewHeight = [[headView.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
NSLog(@"--->%.f",webViewHeight);
后來我分別用了這兩個方法? 分別發(fā)現(xiàn)了坑點?
后臺數(shù)據(jù)有一個HTML特別的長 5000多
就是在這里出現(xiàn)了問題?
第一次加載的時候 :
? ? ? 第一種方法 行高是1
? ? ? 第二種方法? 行高是正確行高
刷新頁面之后? :
? ? 第一種方法是正確行高?
第二種方法? JS語句的 行高竟然多了 50 ,就是說整個視圖 多了一塊黑色
對于如何處理這個問題?
第一種行高的方法 就是初始化設置一個小的行高 這個改變不了?
第二種方法 是JS注入? 本人對JS真的不懂 為什么會出現(xiàn)這個問題? (數(shù)值會增大)真的不懂
這邊又著急上線? 情急之下 是這樣解決的
給控制器加一個屬性
@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];
}
整體的思路就是? 第一次加載的時候 調(diào)用JS注入的方法? 之后調(diào)用 sizeThatFits的方法?
其實 這個只是解決問題的方式 但是問題的原理 不清楚 如果有知道原理的小伙伴 分享一下 謝謝 嘿嘿