iOS關(guān)于webview的自適應行高問題解決方案

? 最近遇到了一些有趣的問題 分享一下 ,同時也是對自己的問題進行總結(jié)? ?

之前用過的webview 主要是兩種,一種是加載網(wǎng)頁? 一種是加載HTML 還有其他的 沒接觸 這里不談

這次的需求的是在原生中間加一個webview 效果如圖1.0

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的方法?

其實 這個只是解決問題的方式 但是問題的原理 不清楚 如果有知道原理的小伙伴 分享一下 謝謝 嘿嘿

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容