美文网首页
wkwebview加载文本并自适应

wkwebview加载文本并自适应

作者: 雪里的懒猪 | 来源:发表于2019-04-28 11:08 被阅读0次

    项目中原本使用的是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];
      }

    相关文章

      网友评论

          本文标题:wkwebview加载文本并自适应

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