最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS中精確計算WebView高度的方法示例

 更新時間:2018年05月14日 11:16:47   作者:coder小鵬  
這篇文章主要給大家介紹了關(guān)于iOS中如何精確計算WebView高度,以及iOS開發(fā)之解決WebView自適應(yīng)內(nèi)容高度的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧

前言

在開發(fā)app的過程中難免會遇到將webView加載到tableView的cell上的需求,一般遇到這種問題,通常想到的思路就是在webView的回調(diào)方法webViewDidFinishLoad中獲取到webView的高度,刷新tableView,將高度賦值給tableView的回調(diào)方法heightForRow。看似沒有任何問題,但是在實際操作的時候卻發(fā)現(xiàn)得到的高度并不是webView的實際高度,顯然這種方法是行不通的。其實并不是方法不行,而是webViewDidFinishLoad代理方法被調(diào)用時,頁面并不一定完全展現(xiàn)完成,可能有圖片還未加載出來,導(dǎo)致此時獲取的高度是并不是最終高度,過會兒圖片加載出來后,瀏覽器會重新排版,而我們在這之前給了一個錯誤高度,導(dǎo)致顯示異常。既然這種方法行不通,那么到底如何才能準(zhǔn)確計算webView的高度呢?

答案是監(jiān)聽,具體的實現(xiàn)過程如下:

給webView的scrollView的contentSize屬性添加監(jiān)聽,每當(dāng)內(nèi)容發(fā)生變化,contentSize一定會跟著變,捕獲這個變動,在監(jiān)聽方法中實現(xiàn)webViewDidFinishLoad中的代碼,也就是獲取最新的內(nèi)容高度賦給webView:

//添加監(jiān)聽
[_WebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"WejinWuLiuViewController"];
//監(jiān)聽回調(diào)
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
 
 if ([keyPath isEqualToString:@"contentSize"]) {
 
 _webViewHeight = [_WebView.scrollView contentSize].height;
 CGRect newFrame = _WebView.frame;
 newFrame.size.height = _webViewHeight;
 _WebView.frame = newFrame;
 }
}

iOS開發(fā)之解決WebView自適應(yīng)內(nèi)容高度

首先如果直接進(jìn)行內(nèi)容展示,或者進(jìn)行sizeToFit的操作,那么可能會造成圖片超過屏幕大小,字體變得很小的結(jié)果,所以這里用到了UIWebView的delegate方法和添加了html的標(biāo)簽語言,使用了javascript操作方法。具體可以研究代碼,如下:

//web 
-(UIWebView *)detailWebView 
{ 
if (_detailWebView == nil) { 
_detailWebView = [UIWebView new]; 
_detailWebView.delegate = self; 
_detailWebView.scrollView.bounces = NO; 
_detailWebView.scrollView.showsHorizontalScrollIndicator = NO; 
_detailWebView.scrollView.scrollEnabled = NO; 
_detailWebView.dataDetectorTypes = UIDataDetectorTypeAll; 
[_detailWebView sizeToFit]; 
} 
return _detailWebView; 
} 
NSString *htmlcontent = [NSString stringWithFormat:@"<head><style>img{max-width:%fpx !important;}</style></head><div id=\"webview_content_wrapper\">%@</div>",f_Device_w-30,detailDic[@"content"]]; 

[_detailWebView loadHTMLString:htmlcontent baseURL:nil]; 
#pragma mark ----- webView 的 delegate 
- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
//獲取頁面高度(像素) 
NSString * clientheight_str = [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]; 
float clientheight = [clientheight_str floatValue]; 
//設(shè)置到WebView上 
webView.frame = CGRectMake(15, _whereNewsLabel.bottom+10, f_Device_w-30, clientheight); 

//下面這樣寫就是獲取到比較準(zhǔn)確的內(nèi)容高度,不需要再進(jìn)行其他計算了 
//獲取內(nèi)容實際高度(像素) 
NSString * height_str= [webView stringByEvaluatingJavaScriptFromString: @"document.getElementById('webview_content_wrapper').offsetHeight + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-top')) + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-bottom'))"]; 
float height = [height_str floatValue]; 

//再次設(shè)置WebView高度(點) 
webView.frame = CGRectMake(15, _whereNewsLabel.bottom+10, f_Device_w-30, height); 

if ([self.delegate respondsToSelector:@selector(backWebViewWithHeight:)]) { 
[self.delegate backWebViewWithHeight:webView.bottom+5]; 
} 
} 

有寫代碼是我項目中使用的,沒有必要用,大家可以根據(jù)自己的需要修改,必要的代碼上面都有

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • iOS指紋登錄(TouchID)集成方案詳解

    iOS指紋登錄(TouchID)集成方案詳解

    這篇文章主要為大家詳細(xì)介紹了iOS指紋登錄TouchID的集成方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • iOS App開發(fā)中使cell高度自適應(yīng)的黑魔法詳解

    iOS App開發(fā)中使cell高度自適應(yīng)的黑魔法詳解

    這篇文章主要介紹了iOS App開發(fā)中使cell高度自適應(yīng)的黑魔法詳解,作者利用iOS8以后的新特性講解了TableView、CollectionView中的cell高度自適應(yīng)以及UITextView輸入內(nèi)容實時更新cell高度的方法,需要的朋友可以參考下
    2016-03-03
  • 詳解IOS圖層轉(zhuǎn)場動畫

    詳解IOS圖層轉(zhuǎn)場動畫

    這篇文章主要為大家詳細(xì)介紹了IOS圖層轉(zhuǎn)場動畫, CATransition類實現(xiàn)層的轉(zhuǎn)場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果,感興趣的小伙伴們可以參考一下
    2016-02-02
  • IOS 避免self循環(huán)引用的方法的實例詳解

    IOS 避免self循環(huán)引用的方法的實例詳解

    這篇文章主要介紹了IOS 避免self循環(huán)引用的方法的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • iOS schem與Universal Link 調(diào)試時踩坑解決記錄

    iOS schem與Universal Link 調(diào)試時踩坑解決記錄

    這篇文章主要為大家介紹了iOS schem與Universal Link 調(diào)試時踩坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • iOS制作帶彈跳動畫發(fā)布界面

    iOS制作帶彈跳動畫發(fā)布界面

    這篇文章主要為大家詳細(xì)介紹了iOS制作帶彈跳動畫發(fā)布界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • iOS清除所有緩存的實例代碼

    iOS清除所有緩存的實例代碼

    本篇文章主要介紹了iOS清除所有緩存的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • iOS使用WebView生成長截圖的第3種解決方案

    iOS使用WebView生成長截圖的第3種解決方案

    這篇文章主要給大家介紹了關(guān)于iOS使用WebView生成長截圖的第3種解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • iOS 檢測網(wǎng)絡(luò)狀態(tài)的兩種方法

    iOS 檢測網(wǎng)絡(luò)狀態(tài)的兩種方法

    一般有Reachability和AFNetworking監(jiān)測兩種方式,都是第三方的框架,下文逐一詳細(xì)給大家講解,感興趣的朋友一起看看吧
    2016-10-10
  • iOS如何獲取當(dāng)前日期前后N天的時間示例代碼

    iOS如何獲取當(dāng)前日期前后N天的時間示例代碼

    這篇文章主要給大家介紹了關(guān)于iOS如何獲取當(dāng)前日期前后N天的時間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。
    2017-11-11

最新評論

横峰县| 侯马市| 贡觉县| 棋牌| 蛟河市| 集安市| 浏阳市| 尼勒克县| 财经| 武胜县| 镇赉县| 南开区| 西城区| 罗平县| 政和县| 清水河县| 松潘县| 武义县| 大名县| 分宜县| 灵寿县| 宁陵县| 乌拉特后旗| 英超| 卫辉市| 延津县| 黄浦区| 山阳县| 集贤县| 阿尔山市| 平度市| 宝鸡市| 定安县| 嘉定区| 刚察县| 锦屏县| 西乌珠穆沁旗| 怀集县| 普陀区| 河南省| 深水埗区|