美文网首页
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