项目中原本使用的是UIWebView,当UIWebView放在Cell上,cell特别多,频繁滑动,会出现闪退的问题,是由于UIWebView性能问题导致的崩溃,所以换成了WKWebView;
代码如下:
头文件引入:
import <WebKit/WebKit.h>
遵守的代理<WKNavigationDelegate>
-
(WKWebView *)questionContentWebView
{
if (!_questionContentWebView) {
//配置环境
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKUserContentController *userContentController =[[WKUserContentController alloc]init];
configuration.userContentController = userContentController;
_questionContentWebView = [[WKWebView alloc]initWithFrame:CGRectMake(w(60), h(40), self.width - w(120), h(30)) configuration:configuration];
// 透明背景色
_questionContentWebView.backgroundColor = [UIColor clearColor];
_questionContentWebView.scrollView.backgroundColor = [UIColor clearColor];
_questionContentWebView.opaque = NO;_questionContentWebView.scrollView.scrollEnabled = YES;// 虽然做了高度自适应,但是屏幕的宽度是有限的,当显示的文本内容中出现不能折行的空格(\U00a0)时,webview中的scrollview的内容宽度会超出控件本身的宽度,所以还是支持滑动会好些 _questionContentWebView.navigationDelegate = self; // 添加kvo监听webview的scrollView.contentSize变化 [_questionContentWebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil]; [self.scrollView addSubview:_questionContentWebView];
}//CGRectMake(0, h(30), self.width, h(60))
return _questionContentWebView;
}
// 在观察contentSize的方法中,完成控件的自适应大小
-
(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"contentSize"]) {
CGRect webFrame = self.questionContentWebView.frame;
webFrame.size.height = self.questionContentWebView.scrollView.contentSize.height;
self.questionContentWebView.frame = webFrame;@weakify(self); dispatch_async(dispatch_get_main_queue(), ^{ @strongify(self); //刷新完成 [self setNeedsLayout]; });
}
}
pragma mark 网页加载完成
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView{
NSLog(@"加载中断");// 当 WKWebView 总体内存占用过大,页面即将白屏的时候,系统会调用上面的回调函数,我们在该函数里执行[webView reload](这个时候 webView.URL 取值尚不为 nil)解决白屏问题。在一些高内存消耗的页面可能会频繁刷新当前页面,H5侧也要做相应的适配操作。
[webView reload];
}
// 在加载结束的方法中设置字体颜色等属性
-
(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
// 网页加载完成后,,设置字体大小
[webView evaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '330%'" completionHandler:nil];//字体颜色
[webView evaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextFillColor= '#2A2A2A'" completionHandler:nil];
// 文字居中显示
NSString *bodyStyle = @"document.getElementsByTagName('body')[0].style.textAlign = 'center';";
[webView evaluateJavaScript:bodyStyle completionHandler:nil];
}
网友评论