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