iOS - UIWebView
前言
NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding, UIScrollViewDelegate> @available(iOS 2.0, *) public class UIWebView : UIView, NSCoding, UIScrollViewDelegate
UIWebView 控件是做网络应用开发时使用的最多的一个控件,它实现了内置的浏览器(类似于 Safari),并且 UIWebView 继承自 UIView,可以将其像其它控件一样应用到需要的位置。
- 优点:简单,快速。
缺点:内存消耗大,对于手机端的硬件支持不够好,例如:定位,捏合(传统互联网只有点击动作)。
-
应用场景:
-
适合于内容版式变化比较大的应用。
网易新闻,各种图文混排,甚至嵌入视频。
菜谱,各种图片搭配,图文并茂。
运动类的应用:羽毛球,后场高远球,来一段视频,图解说明,分解动作...。 -
有些公司,有网站,没有 iOS 应用,着急上架,可以先用 webView 快速包装一个。
百度的一系列应用,去年年初才慢慢的转成 iOS 应用。
iPhone 手机的浏览器 Safari 就是用 UIWebView 控件开发的。
微信内嵌的浏览器就是 UIWebView 控件
-
iOS 9+ 中若要加载 http: 网络,需要在 Info.plist 中添加 App Transport Security Settings -> key: Allow Arbitrary Loads,value: YES。
1、UIWebView 的创建
-
Objective-C
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)]; // 将 webView 添加到屏幕 [self.view addSubview:webView]; // 加载网络地址 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]]; // 适配屏幕 webView.scalesPageToFit = YES;
-
Swift
let webView:UIWebView = UIWebView(frame: CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)) // 将 webView 添加到屏幕 self.view.addSubview(webView) // 加载网络地址 webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!)) // 适配屏幕 webView.scalesPageToFit = true
2、UIWebView 的设置
-
Objective-C
// 加载指定 URL 所设定的内容 /* 异步加载,可以从服务器和本地读取 */ // 加载网络数据 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]]; // 加载本地文件 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"pdf"]]]]; // 加载 HTML 字符串数据 /* 指定 baseURL 可加载图片 */ // 加载网络 HTML 字符串数据 NSString *htmlString1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://m.baidu.com/"] encoding:NSUTF8StringEncoding error:NULL]; [webView loadHTMLString:htmlString1 baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]]; // 加载本地 HTML 字符串数据 NSString *htmlString2 = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"] encoding:NSUTF8StringEncoding error:NULL]; [webView loadHTMLString:htmlString2 baseURL:nil]; // 加载 Data 数据 /* 比 loadHTMLString 更底层 */ NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]]]; [webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]]; // 适配屏幕 /* YES 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小 */ webView.scalesPageToFit = YES; // 设置自动分页模式 /* UIWebPaginationModeUnpaginated, // 默认不分页 UIWebPaginationModeLeftToRight, UIWebPaginationModeTopToBottom, UIWebPaginationModeBottomToTop, UIWebPaginationModeRightToLeft */ webView.paginationMode = UIWebPaginationModeLeftToRight; // 设置超链接类型 /* UIDataDetectorTypePhoneNumber = 1 << 0, // Phone number detection UIDataDetectorTypeLink = 1 << 1, // URL detection UIDataDetectorTypeAddress = 1 << 2, // Street address detection UIDataDetectorTypeCalendarEvent = 1 << 3, // Event detection UIDataDetectorTypeNone = 0, // No detection at all UIDataDetectorTypeAll = NSUIntegerMax // All types */ webView.dataDetectorTypes = UIDataDetectorTypeAll; // 设置是否用内嵌 HTML5 播放视频 /* 内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性 YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES */ webView.allowsInlineMediaPlayback = NO; // 设置是否需要用户触发来启动媒体播放 /* iPhone and iPad Safari both default to YES */ webView.mediaPlaybackRequiresUserAction = NO; // 设置本页面是否可以 AirPlay 播放 /* iPhone and iPad Safari both default to YES */ webView.mediaPlaybackAllowsAirPlay = YES; // 设置是否把网页内容全部加载到内存中再去渲染 /* iPhone and iPad Safari both default to NO */ webView.suppressesIncrementalRendering = NO; // 设置是否需要用户触发显示键盘 /* default is YES */ webView.keyboardDisplayRequiresUserAction = NO; // 刷新 /* 重新加载页面 */ [webView reload]; // 停止加载 /* 加载过程中,强行停止加载 */ [webView stopLoading]; // 返回至上一个链接 /* 在产生多个链接浏览时,可以返回至浏览历史的上一个链接 */ [webView goBack]; // 前进至下一个链接 /* 在产生多个链接浏览时,可以前进至浏览历史的下一个链接 */ [webView goForward]; // 设置代理,需遵守协议 <UIWebViewDelegate> webView.delegate = self;
-
Swift
// 加载指定 URL 所设定的内容 /* 异步加载,可以从服务器和本地读取 */ // 加载网络数据 webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!)) // 加载本地文件 webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "pdf")!))) // 加载 HTML 字符串数据 /* 指定 URL 可加载图片 */ // 加载网络 HTML 字符串数据 let htmlString1:String = try! String(contentsOfURL: NSURL(string: "https://m.baidu.com/")!, encoding: NSUTF8StringEncoding) webView.loadHTMLString(htmlString1, baseURL: NSURL(string: "https://m.baidu.com/")!) // 加载本地 HTML 字符串数据 let htmlString2:String = try! String(contentsOfFile: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!, encoding: NSUTF8StringEncoding) webView.loadHTMLString(htmlString2, baseURL: nil) // 加载 Data 数据 /* 比 loadHTMLString 更底层 */ let data = NSData(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!)) webView.loadData(data!, MIMEType: "text/html", textEncodingName: "utf-8", baseURL: NSURL(string: "https://m.baidu.com/")!) // 适配屏幕 /* true 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小 */ webView.scalesPageToFit = true // 设置自动分页模式 /* case Unpaginated // 默认不分页 case LeftToRight case TopToBottom case BottomToTop case RightToLeft */ webView.paginationMode = .Unpaginated // 设置超链接类型 /* PhoneNumber // Phone number detection Link // URL detection Address // Street address detection CalendarEvent // Event detection None // No detection at all All // All types */ webView.dataDetectorTypes = .All // 设置是否用内嵌 HTML5 播放视频 /* 内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性 YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES */ webView.allowsInlineMediaPlayback = false // 设置是否需要用户触发来启动媒体播放 /* iPhone and iPad Safari both default to YES */ webView.mediaPlaybackRequiresUserAction = false // 设置本页面是否可以 AirPlay 播放 /* iPhone and iPad Safari both default to YES */ webView.mediaPlaybackAllowsAirPlay = true // 设置是否把网页内容全部加载到内存中再去渲染 /* iPhone and iPad Safari both default to NO */ webView.suppressesIncrementalRendering = false // 设置是否需要用户触发显示键盘 /* default is YES */ webView.keyboardDisplayRequiresUserAction = false // 刷新 /* 重新加载页面 */ webView.reload() // 停止加载 /* 加载过程中,强行停止加载 */ webView.stopLoading() // 返回至上一个链接 /* 在产生多个链接浏览时,可以返回至浏览历史的上一个链接 */ webView.goBack() // 前进至下一个链接 /* 在产生多个链接浏览时,可以前进至浏览历史的下一个链接 */ webView.goForward() // 设置代理,需遵守协议 UIWebViewDelegate webView.delegate = self
3、UIWebView 的协议方法
需遵守协议 UIWebViewDelegate,并设置代理
-
Objective-C
// 将要开始加载网页 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return YES; } // 开始加载网页 - (void)webViewDidStartLoad:(UIWebView *)webView { } // 加载网页完成 - (void)webViewDidFinishLoad:(UIWebView *)webView { } // 加载网页失败 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { }
-
Swift
// 将要开始加载网页 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { return true } // 开始加载网页 func webViewDidStartLoad(webView: UIWebView) { } // 加载网页完成 func webViewDidFinishLoad(webView: UIWebView) { } // 加载网页失败 func webView(webView: UIWebView, didFailLoadWithError error: NSError?) { }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android安全开发之通用签名风险
Android安全开发之通用签名风险 作者:伊樵、舟海、呆狐@阿里聚安全 1 通用签名风险简介 1.1 Android应用签名机制 阿里聚安全漏洞扫描器有一项检测服务是检测APP的通用签名风险。Android系统要求安装的应用必须用数字证书进行签名后才能安装,并且签名证书的私钥由应用开发者保存。签名证书的生成也由开发者自己生成。在应用安装时会校验包名(package name)和签名,如果系统中已经存在了一个相同的包名和签名的应用,将会用新安装的应用替换旧的;如果包名相同但是签名不同,则会安装失败。 为什么需要数字签名? 数字签名是防止要保护的内容被篡改,用非对称加密算法。先对要保护的内容进行消息摘要,用私钥对消息摘要进行加密,生成数字签名,将数字签名和要保护的内容一起分发出去。内容接收者用公钥对数字签名解密得到发送者给的消息摘要A,内容接收者对接收到的内容进行用相同的消息摘要算法处理得到消息摘要B,对比A和B是否相同,来判定传送的内容是否被篡改。正常的APK文件是个ZIP压缩文件,除了应用的可执行文件、资源文件,还包括这些可执行文件、资源文件的摘要信息,数字证书的公钥信息等。并且通过...
- 下一篇
iOS - UIScrollView
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding> @available(iOS 2.0, *) public class UIScrollView : UIView, NSCoding 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限。当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容。普通的 UIView 不具备滚动功能,不适合显示过多的内容,UIScrollView 是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容。 UIScrollView 的用法很简单,将需要展示的内容添加到 UIScrollView 中,设置 UIScrollView 的 contentSize 属性,告诉 UIScrollView 所有内容的尺寸,也就是告诉它滚动的范围。超出 UIScrollView 边框的内容会被自动隐藏,用户可以用过手势拖动来查看超出边框并被隐藏的内容。 UIScrollView 不仅能滚动显示大量内...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音