美文网首页我的收藏
iOS Objc WKWebView适配高度

iOS Objc WKWebView适配高度

作者: 欧皇ff | 来源:发表于2019-10-15 17:19 被阅读0次

    iOS 13 UIWebView将被弃用,以至于以后的项目都需要做WKWebView适配。

    UIWebView 自适应高度非常之简单,设置代理协议 UIWebViewDelegate。

    - (void)webViewDidFinishLoad:(UIWebView*)webView{
    
         //直接使用 webView.scrollView.contentSize.height; 即可
    
    }
    

    但是WKWebView ,设置代理协议 WKNavigationDelegate。

    -(void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation {
      //直接使用 webView.scrollView.contentSize.height; 高度不准确
    }
    
    image

    打印一下,如上图所示,高度异常。

    为了方便高度适配,我特别做了个相关的封装。获取webView.scrollView.offsetHeight & offsetWidth

    获取宽高是为了根据屏幕宽度或者一定的比例进行 高度适配,等比显示更让人赏心悦目。

    直接上代码:

    + (void)wkWebViewAdapter:(WKWebView*)webView Finished:(void(^)(CGFloatwidth,CGFloatheight))block;
    
    +(void)wkWebViewAdapter:(WKWebView*)webView Finished:(void(^)(CGFloat,CGFloat))block {
    
        dispatch_group_t group = dispatch_group_create();
    
        __blockCGFloattW =0.0,tH =0.0;
    
        dispatch_group_enter(group);
    
        //scrollHeight scrollWidth
    
        [webViewevaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
    
            tH = [resultfloatValue];
    
            dispatch_group_leave(group);
    
        }];
    
        dispatch_group_enter(group);
    
        [webViewevaluateJavaScript:@"document.body.scrollWidth" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
    
            tW = [resultfloatValue];
    
            dispatch_group_leave(group);
    
        }];
    
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    
            if(block) {
    
                block(tW,tH);
    
            }
    
        });
    
    }
    

    拷贝即用。

    使用方法:

    image

    可自行扩展:

    [DLHeloper wkWebViewAdapter:webViewFinished:^(CGFloatwidth,CGFloatheight) {
    
        CGFloat contentW =WIDTH-AdapterW(50); //展示宽度
    
        CGFloat scale = contentW/width; //<页面宽度/展示宽度>
    
        self.webHeight = height *scale +AdapterW(50); //webView高度
    
        self.web.scrollView.contentSize = CGSizeMake(contentW, self.webHeight);
    
        [self.tableView reloadRow:0 inSection:1 withRowAnimation:UITableViewRowAnimationNone];
    
    }];
    

    GitHub地址

    相关文章

      网友评论

        本文标题:iOS Objc WKWebView适配高度

        本文链接:https://www.haomeiwen.com/subject/pngsmctx.html