“UIWebView 自適應(yīng)實(shí)際內(nèi)容高度”

起因

公司提出要更改部分界面。其中一個界面是嵌入了一個webView的。要求整個頁面都可以上下滾動,且一個UITextView放在UIWebView下面。

難點(diǎn)

  • UIWebView 的滾動要和 整個頁面的滾動保持一致。只能讓整個UIWebView自適應(yīng)實(shí)際內(nèi)容高度。
  • 加載的網(wǎng)頁的高度是可以動態(tài)改變的。也就是說網(wǎng)頁加載完成后,網(wǎng)頁高度可變

分析

  • 整體滾動無疑要用UIScrollView。網(wǎng)頁加載完成后,網(wǎng)頁的高度變化時,要更改UIWebView的高度,進(jìn)而影響到UITextView的origin.y和UIScrollView的contentSize。嗯,用autolayout很好解決。
  • 網(wǎng)頁的完整高度=document.body.offsetHeight。用stringByEvaluatingJavaScriptFromString:在webViewDidFinishLoad:中獲取。
  • 網(wǎng)頁加載完成后的高度改變,用JavaScriptCore監(jiān)聽對應(yīng)的事件。

結(jié)果

  • UIWebView自適應(yīng)實(shí)際內(nèi)容高度 :
dispatch_async(dispatch_get_main_queue(), ^{
        CGFloat webViewHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
 });

這里的webViewHeight 實(shí)際使用時出現(xiàn)了無法完全展示網(wǎng)頁的情況,最終在這個值的基礎(chǔ)上加上100,解決!

  • 網(wǎng)頁加載完成后,網(wǎng)頁高度可變 :
 JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    context[@"htmlHeightChangeEvent"] = ^{
        //上述獲取高度的方法
        dispatch_async(dispatch_get_main_queue(), ^{
        CGFloat webViewHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
 });
    }];

不同步到主線程,會在網(wǎng)頁加載完成后,改變網(wǎng)頁高度時,報(bào)‘警告’,大意是說有可能出現(xiàn)詭異的錯誤。


The End

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

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

  • UIWebView的測試URL:http://www.le.com/ptv/vplay/25955465.html...
    SvenLearn閱讀 1,685評論 -1 15
  • IOS之UIWebView的使用 剛接觸IOS開發(fā)1年多,現(xiàn)在對于 混合式 移動端開發(fā)越來越流行,因?yàn)殚_發(fā)成本上、...
    學(xué)無止境666閱讀 46,014評論 5 53
  • OS之UIWebView的使用 剛接觸IOS開發(fā)1年多,現(xiàn)在對于 混合式 移動端開發(fā)越來越流行,因?yàn)殚_發(fā)成本上、速...
    知之未道閱讀 1,711評論 0 4
  • 一、初始化(省略) 二、加載數(shù)據(jù)的三種方式: 1.-(void)loadRequest:(NSURLRequest...
    1d2c9b77769c閱讀 3,728評論 0 3
  • 李運(yùn)虎分享:個人的成功是建立在團(tuán)隊(duì)發(fā)展基礎(chǔ)上的,它說到要達(dá)到一個宗旨是跟員工一起去共贏,才能更好的實(shí)現(xiàn)各自...
    徐麗紅閱讀 361評論 0 0

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