当前位置: 首页 > news >正文

UIWebView(1)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、UIWebView的一些官方提醒:

1、除了可以展示HTML外,还可以展示Keynote, PDF, Pages documents, 但是在官方提示,最好的展示富文本的方式是UITextView
文档:For the best rendering of plain and rich text in your app, however, you should use UITextView instead.
2、默认配置下,webview会自动将其上面的Number当做电话号码,当点击时,会自动打电话,可设置dataDetectorTypes 类型来关闭。
3、iOS6后,如果设置了restorationIdentifier,它试图保护其URL的历史,每个页面的缩放和滚动位置,当前正在看哪个页面的信息
4、不能将UIWebView or UITableView 嵌入 UIScrollView中,触摸事件会混乱
5、销毁UIWebView实例前,必须设置UIWebView委托nil。(UIWebView dealloc方法)(这里我在iOS10系统上并未发现内存泄漏,应该是以前版本存在的问题)
6、不建议创建其子类

二、某些属性:

     1、allowsLinkPreview: Bool (iOS 9.0)是否允许预览链接
     2、suppressesIncrementalRendering: Bool 是否等到内容完全加载到内存中再显示
     3、keyboardDisplayRequiresUserAction: Bool 一个布尔值表示web内容是否能以编程方式显示键盘。
     4、dataDetectorTypes: UIDataDetectorTypes  类型的数据转换为可点击的网址在web视图的内容。
     媒体播放管理
     5、allowsInlineMediaPlayback: Bool 是否允许h5在线播放或使用本机全屏控制器。
     6、mediaPlaybackRequiresUserAction: Bool 是否HTML5视频可以自动或要求用户开始播放。
     7、allowsPictureInPictureMediaPlayback: Bool 画中画
     
     页面管理
     8、paginationBreakingMode: UIWebPaginationBreakingMode 列或分页
     9、paginationMode: UIWebPaginationMode 布局模式 居上下左右

三、UIWebViewDelegate

     //页面加载之前调用,拦截加载,是否放行
     optional public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest,      
     navigationType: UIWebViewNavigationType) -> Bool
     //开始加载数据
     optional public func webViewDidStartLoad(_ webView: UIWebView)
     //加载完成
     optional public func webViewDidFinishLoad(_ webView: UIWebView)
     //加载失败
     optional public func webView(_ webView: UIWebView, didFailLoadWithError error: Error)

四、使用

     @IBOutlet weak var webView: MyWebView!

     //设置url的缓存值(也可以不设置)
     let cache = URLCache(memoryCapacity: 1024 * 1024 * 100, diskCapacity: 1024 * 1024 * 100, 
     diskPath: nil)
     URLCache.shared = cache//全局替换
     
     //设置webView
     webView.delegate = self
     if #available(iOS 9.0, *) {
          webView.allowsLinkPreview = true
          webView.allowsPictureInPictureMediaPlayback = true
      } else {
          LLog("iOS 系统版本小于 9.0")
      }
      webView.allowsInlineMediaPlayback = true
      webView.scalesPageToFit = true//设置是否缩放到适合屏幕大小
      
    //加载网络
    func test1() {
        guard let url = URL(string: "https://www.baidu.com") else {
            return
        }
        let request = URLRequest(url: url)
        webView.loadRequest(request)
    }
    //加载本地html字符串
    func test2() {
        let htmlStr = "<html><body><img src='test.png'></body></html>"
        let path = Bundle.main.path(forResource: "test.png", ofType: nil)!
        let url =  URL.init(fileURLWithPath: path)
        webView.loadHTMLString(htmlStr, baseURL: url)
    }
    //加载本地html
    func test21() {
        let path = Bundle.main.path(forResource: "test.html", ofType: nil)!
        let url =  URL(fileURLWithPath: path)
        webView.loadRequest(URLRequest(url: url))
    }
    
    //加载本地其他文件PDF
    func test3() {
        let path = Bundle.main.path(forResource: "testPDF.pdf", ofType: nil)!
        let url =  URL.init(fileURLWithPath: path)
        webView.loadRequest(URLRequest(url: url))
    }

除了上面的加载方式外,还有一种加载二进制数据的方式,不太常用,列出:

open func load(_ data: Data, mimeType MIMEType: String, textEncodingName: String, baseURL: URL)

上面是UIWebView的基本使用,还有其他一些常用的属性,根据属性名字很容易知道他是干嘛的,这里就不过多解释,我们使用webview时,经常需要截取它的加载动作,例如网页调取相册等等,可以在代理方法里面截获,下一篇介绍
 

转载于:https://my.oschina.net/dahuilang123/blog/849709

相关文章:

  • VM虚拟机安装之后出现无法自动登录到桌面以及__vmware_user__怎么办
  • 链接收藏
  • struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化
  • ViewPager结合Fragment进行无限滑动
  • 原生Ajax
  • 过中等难度题目.0310
  • QTcpSocket的连续发送数据和连续接收数据
  • HTM5新手学习的一些日常总结,相互交流和相互学习。
  • 客服系统微服务架构的演化
  • Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范推荐标准
  • IE版本多的可爱_已迁移
  • VB二进制文件读写
  • 2017,3月14号 下午
  • 奇葩设计师贾伟打开你的想象力经济
  • 关于 WordPress 上传图片的各种问题解决办法
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android 架构优化~MVP 架构改造
  • es的写入过程
  • Fabric架构演变之路
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Linux Process Manage
  • orm2 中文文档 3.1 模型属性
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 初识MongoDB分片
  • 缓存与缓冲
  • 阿里云移动端播放器高级功能介绍
  • 从如何停掉 Promise 链说起
  • 如何正确理解,内页权重高于首页?
  • # 飞书APP集成平台-数字化落地
  • ###C语言程序设计-----C语言学习(3)#
  • #if #elif #endif
  • #pragma 指令
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ****Linux下Mysql的安装和配置
  • . Flume面试题
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net Core和.Net Standard直观理解
  • .NET MVC 验证码
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @test注解_Spring 自定义注解你了解过吗?
  • [ Linux ] Linux信号概述 信号的产生
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C语言]编译和链接