iOS 精準(zhǔn)獲取webView內(nèi)容高度并自適應(yīng)高度

參考文檔:
iOS【終極方案】精準(zhǔn)獲取webView內(nèi)容高度席爽,自適應(yīng)高度
iOS精準(zhǔn)獲取webView內(nèi)容高度,自適應(yīng)高度(cell篇)

#pragma mark-懶加載webView
-(UIWebView *)webView{
    if (!_webView) {
//        _webView = [[UIWebView alloc] init];
        // 1隨便多少,不能為0
        _webView = [[UIWebView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,1)];
        _webView.delegate = self;
        _webView.scrollView.scrollEnabled = NO;
        //這個(gè)屬性不加,webview會(huì)顯示很大.
        _webView.scalesPageToFit = YES;
        _webView.opaque =NO;
        //預(yù)先加載url
        [_webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/api/product/piclist?item_id=%@",SERVER,self.model.itemid]]]];
        //給webView的scrollView的contentSize屬性添加監(jiān)聽(tīng),每當(dāng)內(nèi)容發(fā)生變化记靡,contentSize一定會(huì)跟著變,捕獲這個(gè)變動(dòng)
//        [self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:nil];
        [self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
    }
    return _webView;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.webView];
}
#pragma mark - UIWebView Delegate Methods
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
     [[MBProgressHUD HUDForView:self.view] removeFromSuperview];
//    //獲取到webview的高度
////    CGFloat height =  [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"]floatValue];
//    self.webViewHeight = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
//    CGSize webSize = [webView sizeThatFits:CGSizeZero];
//    [webView mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.height.equalTo(@(webSize.height));
//    }];
//    cellhight = self.webViewHeight;
 //   [self.tableView reloadData];

}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"webViewDidStartLoad");
//    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nonnull NSError *)error
{
    NSLog(@"didFailLoadWithError===%@", error);
    isOpen = !isOpen;
     [[MBProgressHUD HUDForView:self.view] removeFromSuperview];
       [AMShowMessage showMessage:@"加載失敗" withDuration:2];
    [self.tableView reloadData];
}
#pragma mark-監(jiān)聽(tīng)的處理1团驱、監(jiān)聽(tīng)tableview偏移(控制導(dǎo)航的透明度)2摸吠、監(jiān)聽(tīng)webView.scrollView的contentSize的變化
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
   
    if ([keyPath isEqualToString:@"contentOffset"])
    {
      
          UIButton *  bottom = [self.view viewWithTag:1000];
        CGPoint offset = [change[NSKeyValueChangeNewKey] CGPointValue];
        CGFloat alpha = offset.y/NAVIGATION_BAR_HEIGHT >1.0f ? 1:offset.y/NAVIGATION_BAR_HEIGHT;
        //設(shè)置一個(gè)顏色并轉(zhuǎn)化為圖片
        UIImage *image = [self imageWithColor:[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:alpha]];
        
        self.navigationView.image = image;
        self.navigationController.navigationBar.alpha = alpha;
        self.topView.backgroundColor = [UIColor colorWithPatternImage:image];
        self.topView.alpha = alpha;

        if (offset.y > 0) {
        self.navigationView.isAlphZero = NO;
            bottom.hidden = NO;
            
        }else{
            self.navigationView.isAlphZero = YES;
             bottom.hidden = YES;
        }
        
    }


    if ([keyPath isEqualToString:@"contentSize"]) {
         //通過(guò)JS代碼獲取webview的內(nèi)容高度
        //self.webViewHeight = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
       //通過(guò)webview的contentSize獲取內(nèi)容高度
       //self.webViewHeight = [self.showWebView.scrollView contentSize].height;
        CGRect frame = self.webView.frame;
        //通過(guò)webview的contentSize獲取內(nèi)容高度
        frame.size.height = self.webView.scrollView.contentSize.height;
        
        //這里獲取webView的高度
        _webViewHeight = frame.size.height;
        NSLog(@"%f",frame.size.height);

        cellhight =_webViewHeight;
        CGSize webSize = [self.webView sizeThatFits:CGSizeZero];
        [self.webView mas_updateConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(@(webSize.height));
        }];

        [self.tableView reloadData];
    }
}

反思:
1、在webViewDidFinishLoad方法中獲取webView的內(nèi)容高度嚎花,會(huì)導(dǎo)致獲取的內(nèi)容高度不精確寸痢,因?yàn)閣ebViewDidFinishLoad代理方法被調(diào)用時(shí),頁(yè)面并不一定完全展現(xiàn)完成紊选,可能有圖片還未加載出來(lái)啼止,導(dǎo)致此時(shí)獲取的高度是并不是最終高度,過(guò)會(huì)兒圖片加載出來(lái)后兵罢,瀏覽器會(huì)重新排版献烦,而我們?cè)谶@之前給了一個(gè)錯(cuò)誤高度,導(dǎo)致顯示異常卖词。所以需要在監(jiān)聽(tīng)到webView.scrollView的contentSize變化時(shí)仿荆,獲取到的webView的內(nèi)容高度才時(shí)精確的。

#pragma mark - UIWebView Delegate Methods
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
     [[MBProgressHUD HUDForView:self.view] removeFromSuperview];
//    //獲取到webview的高度
////    CGFloat height =  [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"]floatValue];
//    self.webViewHeight = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
//    CGSize webSize = [webView sizeThatFits:CGSizeZero];
//    [webView mas_updateConstraints:^(MASConstraintMaker *make) {
//        make.height.equalTo(@(webSize.height));
//    }];
//    cellhight = self.webViewHeight;
    [self.tableView reloadData];

}

2坏平、實(shí)例化創(chuàng)建webView的時(shí)候,必須設(shè)置frame值锦亦,否值不顯示

// 高度隨便多少,可以為1舶替,但不能為0,為0 則webView不顯示
_webView = [[UIWebView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,1)];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杠园,一起剝皮案震驚了整個(gè)濱河市顾瞪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖陈醒,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕橙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钉跷,警方通過(guò)查閱死者的電腦和手機(jī)弥鹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爷辙,“玉大人彬坏,你說(shuō)我怎么就攤上這事∠チ溃” “怎么了栓始?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)血当。 經(jīng)常有香客問(wèn)我幻赚,道長(zhǎng),這世上最難降的妖魔是什么臊旭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任落恼,我火速辦了婚禮,結(jié)果婚禮上巍扛,老公的妹妹穿的比我還像新娘领跛。我一直安慰自己,他們只是感情好撤奸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吠昭。 她就那樣靜靜地躺著,像睡著了一般胧瓜。 火紅的嫁衣襯著肌膚如雪矢棚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天府喳,我揣著相機(jī)與錄音蒲肋,去河邊找鬼。 笑死钝满,一個(gè)胖子當(dāng)著我的面吹牛兜粘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弯蚜,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼孔轴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了碎捺?” 一聲冷哼從身側(cè)響起路鹰,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贷洲,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晋柱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體优构,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年雁竞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钦椭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浓领,死狀恐怖玉凯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情联贩,我是刑警寧澤漫仆,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站泪幌,受9級(jí)特大地震影響盲厌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祸泪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一吗浩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧没隘,春花似錦懂扼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瑰妄,卻和暖如春陷嘴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背间坐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工灾挨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竹宋。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓劳澄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蜈七。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秒拔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,981評(píng)論 3 119
  • 上周我用笑來(lái)老師給出的終極問(wèn)題“什么是最重要”,思考了在選擇工作中什么是重要的狡相。具體可見(jiàn)文章梯轻,選擇工作時(shí)什么是最重...
    vinlson閱讀 2,017評(píng)論 0 50
  • 殘破的墻邊, 倚著一個(gè)殘破的人尽棕。 殘破的人兒喳挑, 有著一個(gè)殘破的夢(mèng)。 殘破的夢(mèng)中滔悉, 住著一個(gè)殘破的你伊诵。 殘破的你矣,...
    凌書(shū)力閱讀 182評(píng)論 0 3