美文网首页
iOS获取WKWebView的真实高度

iOS获取WKWebView的真实高度

作者: Idoahc | 来源:发表于2024-04-18 16:05 被阅读0次

    在iOS开发中获取webView高度是比较常用的,但是已知的几种方法里或多或少都有点问题。
    下面是最终方案。

    #pragma mark - WKNavigationDelegate
    
    // 页面加载完成之后调用
    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
        __weak typeof(self) weakSelf = self;
        // 禁用用户选择
        [self.webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none';"completionHandler:nil];
        [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:nil];
        
            [webView evaluateJavaScript:@"document.body.scrollWidth" completionHandler:^(id _Nullable result,NSError *_Nullable error) {
            //获取页面宽度
            //在全局属性定义一个宽度
            weakSelf.scrollWidth= [result doubleValue];
            
            // NSLog(@"scrollWidth 即为所求:%ff", weakSelf.scrollWidth);
            [webView evaluateJavaScript:@"document.body.scrollHeight"completionHandler:^(id _Nullable result,NSError*_Nullable error) {
                //获取页面高度
                CGFloat scrollHeight = [result doubleValue];
                
                //计算出缩放比,屏幕宽除以webview宽
                CGFloat ratio =  CGRectGetWidth(self.webView.frame) /weakSelf.scrollWidth;
                
                //此处就能求出页面缩放比例后的高度
                //取到的高度在乘以缩放比即可得到准确高度
                
                double webHeight = scrollHeight * ratio;
                [weakSelf.webView mas_remakeConstraints:^(MASConstraintMaker *make) {
                    make.left.top.mas_equalTo(10);
                    make.right.bottom.mas_equalTo(-10);
                    make.height.mas_equalTo(webHeight);
                }];
                [weakSelf.view setNeedsLayout];
                [weakSelf.view layoutIfNeeded];
                
            }];
        }];
    }
    

    相关文章

      网友评论

          本文标题:iOS获取WKWebView的真实高度

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