在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];
}];
}];
}
网友评论