iOS 【偏方】獲取webView高度那些坑!!!

看過這篇iOS【終極方案】精準獲取webView內(nèi)容高度,自適應高度

也看過這篇iOS 【奇巧淫技】獲取webView內(nèi)容高度

然而,就是沒有解決我的問題!

因為,我要加載的H5,只有純圖片,圖片數(shù)量不定
單張圖片太長時,直接會被壓縮。
不超過屏幕高度的,則不會。

當我直接用webView加載圖片的url時,很完美!
但是,有多張圖片時,就無力了!

后來,發(fā)現(xiàn)使用:
document.body.scrollHeight
document.body.scrollWidth
可以獲取到圖片的高度 和 寬度

所以,我使用了兩個webView
一個用來顯示H5,
另一個用來加載單張圖片,并獲取圖片的高寬。
獲取總高度后,再改變第一個webView的高度。

//顯示H5
-(UIWebView *)webView
{
    if (_webView == nil) {
        UIWebView *webView = [[UIWebView alloc] init];
        webView.tag = 100;
        webView.scalesPageToFit = YES; //圖片太大,屏幕顯示不全
        webView.delegate = self;
        webView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight-64);
        webView.scrollView.scrollEnabled = NO;
        _webView = webView;
        
        //裝載webView,多張圖片時,要設置webView的高度為最終高度
        UIScrollView *scrollView = [[UIScrollView alloc] init];
        scrollView.frame = CGRectMake(0, 64, kScreenWidth, kScreenHeight-64);
        [scrollView addSubview:_webView];
        _scrollView = scrollView;
        
        [self.view addSubview:scrollView];
    }
    return _webView;
}
//加載單張圖片并獲取圖片高寬
- (UIWebView *)xxBackgroundWebView{
    if (!_xxBackgroundWebView) {
        UIWebView *webView = [[UIWebView alloc] init];
        webView.tag = 200;
        webView.delegate = self;
        webView.frame = CGRectMake(0, 64, kScreenWidth,10);
        _xxBackgroundWebView = webView;
    }
    return _xxBackgroundWebView;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (webView.tag == 100) {
        NSString *jsString;
        NSString *result;
        
        if (!_flag) { 
            //防止第一個webView重復加載
            _flag = YES;
            
            //獲取網(wǎng)頁內(nèi)的圖片地址
            int i = 0;
            do {
                jsString = [NSString stringWithFormat:@"document.getElementsByTagName('img')[%d].getAttribute('src')",i];
                result = [_webView stringByEvaluatingJavaScriptFromString:jsString];
                DLog(@"res%d:%@",++i,result);
                if (result.length > 0) {
                    [self.imgURLArr addObject:result];
                }
            } while (result.length > 0);
            
            //只有一張圖片時,重新加載圖片地址
            if (_imgURLArr.count == 1) {
                NSString *url = _imgURLArr[0];
                if ([url hasPrefix:@"http"]) {
                    webView.scrollView.scrollEnabled = YES;
                    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
                }
            //多張圖片時,使用第二個webView循環(huán)加載圖片
            }else if (_imgURLArr.count > 1){
                NSString *url = _imgURLArr[_imgIndex];
                if ([url hasPrefix:@"http"]) {
                    [self.xxBackgroundWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
                }
            }
        }
    }
    else if (webView.tag == 200){
        _imgIndex++;
        
        //NSLog(@"xxheight2:%f",[[_xxBackgroundWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue]);
        //NSLog(@"xxwidth2:%f",[[_xxBackgroundWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth"] floatValue]);

        
        CGFloat imgH = [[_xxBackgroundWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
        CGFloat imgW = [[_xxBackgroundWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth"] floatValue];
        if (imgH > 0 && imgW > 0) {
            /**< 
             h1   w1
             -- = --
             h2   w2
             */
            //保存圖片高度
            [self.imgHeightArr addObject:@((imgH*0.5)/(imgW*0.5)*kScreenWidth)];
        }
        //繼續(xù)加載圖片
        if (_imgIndex < _imgURLArr.count) {
            NSString *url = _imgURLArr[_imgIndex];
            if ([url hasPrefix:@"http"]) {
                [self.xxBackgroundWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
            }
        }else{
            //所有圖片都已經(jīng)加載過
            //NSLog(@"self.imgHeightArr:%@",self.imgHeightArr);
            __block CGFloat height = 0;
            [_imgHeightArr enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
                height += [obj floatValue];
            }];
            _webView.frame = CGRectMake(0, 0,kScreenWidth, height);
            _scrollView.contentSize = CGSizeMake(kScreenWidth, height);
        }
    }
}

完美解決!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,156評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,692評論 25 708
  • 關(guān)于寫作,有一些專業(yè)人士建議初學者從練習寫短句開始。這個建議不無道理。人們常說,小孩不宜「還沒學會走就學跑」,其實...
    liupc閱讀 1,094評論 0 0
  • 聽了很多的演講,也看了很多的演講視頻,讀了很多的演講的文章!總從每一個字里、表情里的看到演講者所要傳達的情感。只不...
    祥祥布魯斯閱讀 288評論 0 3
  • 《權(quán)力的游戲》第六季結(jié)束,引來粉絲哀嚎一片。 你就知道《權(quán)游》。 有沒有注意到,另一部超贊的高分美劇,也同時完了?...
    Sir電影閱讀 3,763評論 5 48