iOS12已经完全弃用UIWebView改用WKWebView
WKWebView是苹果公司在iOS8系统推出的,相比于UIWebView的优势:
1.在性能、稳定性、占用内存方面有很大提升;
2.允许JavaScript的Nitro库加载并使用(UIWebView中限制)
3.增加加载进度属性:estimatedProgress,不用在自己写假进度条了
4.更多的支持HTML5的特性
5.官方宣称的高达60fps的滚动刷新率以及内置手势
6.Safari相同的JavaScript引擎
7.将UIWebViewDelegate与UIWebView拆分成了14类与3个协议(官方文档说明)
8.另外用的比较多的,增加加载进度属性:estimatedProgress

=========================================
用法介绍:

  1. 导入库 :WebKit.framework
  2. 导入头文件 :#import <WebKit/WebKit.h>
  3. 如果xib或者storyboard中已经拖拽了WebView,删除WebView,拖拽WebKitView来替换原来的WebView
  4. 在需要实现webView的控制类中创建WKWebView属性
  5. 在需要实现webView的控制类中继承WKNavigationDelegate, WKUIDelegate
  6. 实现委托 :
    wkWebView.navigationDelegate = self;
  7. WKNavigationDelegate代理方法 :
    <1>在发送请求之前,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
    <2>页面开始加载时使用
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation;
    <3>在收到响应是,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
    <4>内容开始返回时使用
    - (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation;
    <5>页面加载完成时使用
    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;
    <6>页面加载失败时使用
    - (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;
    <7>接收到服务器跳转请求的时候调用
    - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation;
    tips :
    如果实现关于是否跳转的协议方法,其中decisionHandler必须调用,传入参数为WKNavigationActionPolicyCancel,WKNavigationActionPolicyAllow。
    否则程序会crash。
  8. WKUIDelegate代理方法 :
    UI界面相关,原生控件支持,三种提示框:输入、确认、警告。
    首先将web提示框拦截然后再做处理。
    <1>创建一个新的webView
    - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
    <2>webView关闭
    - (void)webViewDidClose:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0));
    <3>警告框
    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
    <4>确认框
    - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
    <5>输入框
    - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;
    9.加载本地html :
    <1>大概使用方法跟UIWebView是一样的,举例 :
    NSString *filePath = [[NSBundle mainBundle]pathForResource:@“test” ofType:@“html”];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [wkWebView loadRequest:request];
    tips : 路径变成图片路径,同样可以加载图片。
    <2>一些常用属性
    allowsBackForwardNavigationGestures:BOOL类型,是否允许左右划手势导航,默认不允许
    estimatedProgress:加载进度,取值范围0~1
    title:页面title
    .scrollView.scrollEnabled:是否允许上下滚动,默认允许
    backForwardList:WKBackForwardList类型,访问历史列表,可以通过前进后退按钮访问,或者通过goToBackForwardListItem函数跳到指定页面

tips :

  1. 如果需要背景色透明,需要设置以下参数 :
    wkWebView.backgroundColor = [UIColor clearColor];
    wkWebView.opaque = NO
  2. 禁止拖拽时候的反弹效果 :
    [(UIScrollView *)[[wkWebView subviews] objectAtIndex:0] setBounces:NO];
  3. WKWebView中加载html之后,不会像UIWebView一样,自动缩放,如果需要按照当前webView的大小进行自动缩放的话,需要添加以下代码 :
    • (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
      NSString *injectionJSString = @“var script = document.createElement(‘meta’);”
      “script.name = ‘viewport’;”
      “script.content=“width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no”;”
      “document.getElementsByTagName(‘head’)[0].appendChild(script);”;
      [webView evaluateJavaScript:injectionJSString completionHandler:nil];
      }

iOS12 UIWebView转换WKWebView相关推荐

  1. iOS之LCWebView(和并UIWebView和WKWebView,兼容iOS7及以上)

    一,说明 我的项目是从iOS7开始支持, 一直用UIWebView作为网页容器. 但是,为了更好的用户体验. 我将UIWebView和WKWebView封装合并成一个网页容器LCWebView. 下面 ...

  2. UIWebView、WKWebView使用详解及性能分析

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

  3. 记录苹果构建吃包,苹果报itms-90809,cordova 需要将UIWebView转为WKWebView

    记录苹果构建吃包,苹果报itms-90809,cordova 需要将UIWebView转为WKWebView 参考链接 步骤 1. 添加cordova-ios 需要是5.1.1 以上 2.增加cord ...

  4. iOS-获取UIWebView或者WKWebView页面的视频连接

    说明 不论使用的是UIWebView还是WKWebView,控件在加载有视频的网页时,我们想抓取网页上的视频链接,用来干其他的事,这里我演示抓取视频链接用自己自定义的视频播放器来播放. UIWebVi ...

  5. UIWebView和WKWebView的使用及js交互

    web页面和app直接的交互是很常见的东西,之前尝试过flex和js的相互调用以及android和js的相互调用,却只有ios没试过,据说比较复杂.周末花了点时间研究了一下,确实和其他的不太一样,但是 ...

  6. android webview ios uiwebview和wkwebview的交互以及本地缓存

    android webview js调用java的方式 1.java通过注解@JavascriptInterface导出方法, js通过window.别名.方法名调用方法 2.拦截url方式,通过sh ...

  7. iOS下JS与OC互相调用(五)--UIWebView + WebViewJavascriptBridge

    WebViewJavascriptBridge是一个有点年代的JS与OC交互的库,使用该库的著名应用还挺多的,目前这个库有7000+star.我去翻看了它的第一版本已经是4年前了,在版本V4.1.4以 ...

  8. WKWebView 那些坑

    导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView拥有60fps滚动刷新 ...

  9. wkWebView 的一些问题

    导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷 ...

最新文章

  1. 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
  2. 自定义变量 配置文件_跟我一起学.NetCore之自定义配置源热更新对象绑定
  3. 南开大学2014年高等代数部分试题解答
  4. 云服务器ecs的特点有什么
  5. maven工程错误汇总
  6. Java EE 6示例– Galleria –第3部分
  7. linux 8002端口,linux – 如何限制反向SSH调整端口?
  8. Bailian4151 电影节【贪心】
  9. SQL 复习二(数据查询语言)
  10. c语言水库抽样算法代码,LeetCode---蓄水池抽样算法
  11. postSQL 正则表达式与like使用
  12. IT行业职位分为六大类
  13. SpringBoot、SpringCloud版本中GA/PRE/SNAPSHOT的详解
  14. Maven setting文件配置错误:Non-parseable settings..in comment after two dashes (--) next character must be
  15. STM32MP157网络环境 TFYPNFS搭建手册-学习记录
  16. 史上最全面试题汇总,没有之一,不接受反驳
  17. 微软收购以色列触控笔技术
  18. 微信如何设置延迟到账 | 微信到账时间设置在哪里设置 | 微信转账后24小时/2小时/立即到账怎么设置
  19. 二元函数对xy同时求导_更新丨10分钟掌握高等数学上册函数极限求解问题(考研、期末复习均可以用)...
  20. 腾讯撤回的消息在服务器吗,腾讯云IM消息撤回

热门文章

  1. Flink 案件分区 处理函数(KeyedProcessFunction)
  2. 岭北之役:徐达的莫大苦楚
  3. docker启动container
  4. Android逆向 学习Android安全和逆向开发的路线总结,android开发平台的发展
  5. opencv学习日志12-大津法二值化
  6. 标定学习笔记(三)-- 利用OpenCV实现张正友标定法
  7. 你们要的Unity联网对战游戏小Demo
  8. Leetcode 1096:花括号展开 II(超详细!!!)
  9. 密码学ECC算法梳理总结
  10. 每天上班12小时,一个月休息4-8天,工资4000左右(社保,公积金扣完后),你觉得这样的工作能长期做下去么?