Cell 嵌套 WebView 高度及寬度計(jì)算解決辦法(完美版)

此方法適用于CollectionView,tableView
解決了以下幾個(gè)問題

  • 解決了由于WebView中圖片過大或者過小而顯示不全的問題
  • 解決了循環(huán)刷新CollectionView,tableView的問題
  • 解決了高度計(jì)算不準(zhǔn)確的問題

轉(zhuǎn)載請注明出處

無循環(huán)刷新問題,性能良好
性能良好
性能良好

NSString+js.h

//by:HQ
#import "NSString+js.h"

/**
 寬度計(jì)算

 @param width 屏幕寬度
 @return 寬度
 */
+ (instancetype)getJSWithScreentWidth:(CGFloat) width;


/**
 高度計(jì)算

 @param webView
 @return 高度
 */
+ (instancetype)getJSWithScreentHeightWithWebView:(UIWebView*)webView;
@end

NSString+js.m

//by:HQ
#import "NSString+js.h"

@implementation NSString (js)
//寬度計(jì)算
+ (instancetype)getJSWithScreentWidth:(CGFloat) width{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"webviewDeal.js" ofType:nil];
    NSString *js = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
    return [NSString stringWithFormat:@"%@ \n autoSizeFit(%@);",js,[NSString stringWithFormat:@"%.2f",width]];
}
//高度計(jì)算
+ (instancetype)getJSWithScreentHeightWithWebView:(UIWebView *)webView{
    CGFloat height =[[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].scrollHeight"] floatValue];
    return [NSString stringWithFormat:@"%f",height];
}
@end

計(jì)算寬度核心代碼

新建一個(gè).js文件,把代碼復(fù)制進(jìn)去(例如:webviewDeal.js)


//  by HQ

var autoSizeFit = function(screenWidth){
    //1.設(shè)置所有字體
    var body = document.getElementsByTagName("body")[0];
    //設(shè)置body的寬度
    body.style.width = screenWidth;
    //設(shè)置body的字體
    var bodyStyleFontSize = body.style.fontSize;
    //設(shè)置整個(gè)body的寬度
    var bodyStyleWidth = body
    if(bodyStyleFontSize.length<=0){
        document.getElementsByTagName("body")[0].style.fontSize = 14;
    }
    
    //2獲取table的寬度
    var tables = document.getElementsByTagName("table");
    for(var i=0;i<tables.length;i++){
        //2.1.設(shè)置所有表格的字體
        //判斷是否有style屬性的fontSize是否有值
        var table = tables[i];
        
        var tableStyleFontSize = table.style.fontSize;
        if(tableStyleFontSize.length<=0){//沒有設(shè)置了table的fontSize
            table.style.fontSize = 14;
        }
        
        //2.2.設(shè)置表格的寬度
        var tableStyleWidth = table.style.width;
        table.style.width = screenWidth;
    }
    
    //3.設(shè)置圖片
    var images = document.getElementsByTagName("img");
    for(var i=0;i<images.length;i++){
        var image = images[i];
        //設(shè)置圖片的寬高比例
        
        var imgWidth = image.width;
        var imgHeight = image.height;
        var scale = imgHeight/imgWidth;
        
        //再通過比例來設(shè)置圖片的寬高
        image.width = screenWidth;
        image.height = screenWidth*scale;
    }
    
    //4.設(shè)置所有div的寬度
    var divs = document.getElementsByTagName("div");
    for(var i=0;i<divs.length;i++){
        var div = divs[i];
        div.style.width = screenWidth;
    }
    
    //5.設(shè)置ul
    var uls = document.getElementsByTagName("ul");
    for(var i=0;i<uls.length;i++){
        var ul = uls[i];
        ul.style.width = screenWidth;
    }
}

如何使用?

//by:HQ
#pragma mark - UIWebViewDelegate
-(void)webViewDidFinishLoad:(UIWebView *)webView{
   //注入js,設(shè)置寬度
    NSString *jsStr = [NSString getJSWithScreentWidth:kSCREEN_WIDTH-35];
   [webView stringByEvaluatingJavaScriptFromString:jsStr];
   
  //獲取高度
    CGFloat height = [NSString getJSWithScreentHeightWithWebView:webView].floatValue;
//獲取模型的高度,判斷模型中的高度是不是WebView的高度,如果不是則賦值給模型,賦值給模型后,高度相等,不在進(jìn)入判斷語句內(nèi),不再出現(xiàn)循環(huán)刷新問題
  ProductInfo * productInfo = self.concroteDetailsModel.productInfo;
    if (height!=productInfo.descriptionCellHigh) {
        productInfo.descriptionCellHigh  = height;
        [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:4]];
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹭睡,一起剝皮案震驚了整個(gè)濱河市璧亮,隨后出現(xiàn)的幾起案子转捕,更是在濱河造成了極大的恐慌惶傻,老刑警劉巖挖胃,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冈钦,居然都是意外死亡居凶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門躯喇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辫封,“玉大人,你說我怎么就攤上這事廉丽【胛ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵正压,是天一觀的道長欣福。 經(jīng)常有香客問我,道長焦履,這世上最難降的妖魔是什么拓劝? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任雏逾,我火速辦了婚禮,結(jié)果婚禮上郑临,老公的妹妹穿的比我還像新娘栖博。我一直安慰自己,他們只是感情好厢洞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布仇让。 她就那樣靜靜地躺著,像睡著了一般躺翻。 火紅的嫁衣襯著肌膚如雪妹孙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天获枝,我揣著相機(jī)與錄音蠢正,去河邊找鬼。 笑死省店,一個(gè)胖子當(dāng)著我的面吹牛嚣崭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懦傍,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼雹舀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粗俱?” 一聲冷哼從身側(cè)響起说榆,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寸认,沒想到半個(gè)月后签财,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偏塞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年唱蒸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灸叼。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡神汹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出古今,到底是詐尸還是另有隱情屁魏,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布捉腥,位于F島的核電站氓拼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜披诗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一撬即、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呈队,春花似錦剥槐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至几于,卻和暖如春蕊苗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沿彭。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工朽砰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喉刘。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓瞧柔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睦裳。 傳聞我的和親對象是個(gè)殘疾皇子造锅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件廉邑、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 UI下拉刷新模糊效果A...
    袁俊亮技術(shù)博客閱讀 11,916評論 9 105
  • 2017年四月十九日二十一點(diǎn)三十六分哥蔚,我站在操場,看著自己的影子在宿舍樓頂?shù)拇筇秸諢粝吕睦w細(xì)蛛蒙,我想糙箍,要是以后真...
    我憾昆侖閱讀 531評論 3 4
  • 每個(gè)人都有屬于自己的那一道光倍靡,是紅是藍(lán)是白是黑,都盡不相同课舍,都有屬于自己的獨(dú)特顏色。 人生這條路他挎,只能靠自己的雙腳...
    子耳子耳閱讀 221評論 0 0
  • 看不清的容顏 愈是模糊筝尾,愈是想念 沉默,早已習(xí)慣 寂寞的夜晚 點(diǎn)一支煙 是孤單 办桨,是想念 你溫柔的雙眸 觸動了我的...
    LQ木子閱讀 195評論 0 0