iOS WKWebView 加载进度条、导航栏返回&关闭 (Swift 4)
导航:
1.加载进度条
加载进度条
效果图

代码如下:
self.progressView.trackTintColor = UIColor.white
self.progressView.progressTintColor = UIColor.colorWithHex(value: 0x72A438, alpha: 1).withAlphaComponent(0.8)
self.progressView.frame = CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 1)
self.progressView.transform = CGAffineTransform.init(scaleX: 1, y: 3)
self.view.addSubview(self.progressView)
self.progressView.progress = 0.05 //设置初始值,防止网页加载过慢时没有进度 // Swift 4 KVO
self.observeBlock = webView.observe(\.estimatedProgress, options: NSKeyValueObservingOptions.new.union(NSKeyValueObservingOptions.old)) { (webview, changed) in if let new = changed.newValue{
self.progressView.isHidden = false
self.progressView.progress = Float(new)
if new >= 1.0{
delay(second: 0.3, block: {
self.progressView.isHidden = true
})
}
}
}
// 加载失败隐藏进度条
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { self.progressView.isHidden = true
}
延迟执行函数:
func delay(second:Double,block:@escaping (() -> Void)){
DispatchQueue.main.asyncAfter(deadline: .now() + second, execute: {
block()
})
}
导航栏增加返回、关闭按钮
效果图

代码如下:
func showLeftNavigationItem(){
let goBackBtn = UIButton.init()
let closeBtn = UIButton.init()
goBackBtn.setImage(UIImage.init(named: "navi_go_back"), for: UIControlState.normal)
goBackBtn.setTitle(" 返回", for: UIControlState.normal)
goBackBtn.addTarget(self, action: #selector(goBack), for: UIControlEvents.touchUpInside)
goBackBtn.sizeToFit()
goBackBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -8, 0, 8)
let backItem = UIBarButtonItem.init(customView: goBackBtn)
closeBtn.setTitle("关闭", for: UIControlState.normal)
closeBtn.addTarget(self, action: #selector(popViewController), for: UIControlEvents.touchUpInside)
closeBtn.sizeToFit()
let closeItem = UIBarButtonItem.init(customView: closeBtn)
let items:[UIBarButtonItem] = [backItem,closeItem]
self.navigationItem.leftBarButtonItems = items
}
按钮对应的Selector:
@objc func goBack(){
self.webView.goBack()
}
@objc func popViewController(){
self.navigationController?.popViewController(animated: true)
}
加载完成时,决定是否显示这两个按钮:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
checkGoBack()
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
checkGoBack()
}
/// 检查返回(pop/goback)
func checkGoBack(){
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = !self.webView.canGoBack
if self.webView.canGoBack{
showLeftNavigationItem()
}else{
self.navigationItem.leftBarButtonItems = nil
}
}
白色返回箭头图片:
右键括号处保存 2x:(
) 3x:(
)
Ficow原创,转载请注明出处:http://www.cnblogs.com/ficow/p/7639912.html
iOS WKWebView 加载进度条、导航栏返回&关闭 (Swift 4)的更多相关文章
- iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26
1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...
- 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)
// // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...
- bootstrap课程9 bootstrap如何实现动画加载进度条的效果
bootstrap课程9 bootstrap如何实现动画加载进度条的效果 一.总结 一句话总结:在bootstrap进度条的基础上添加js(定时器),动态的改变进度条即可.很简单的. 1.路径导航是什 ...
- css3 linear-gradient实现页面加载进度条效果
最终效果图: html结构: <div> <p class="p1"> <span></span> < ...
- ajax页面加载进度条插件
下面两个都是youtube视频的加载进度条效果的ajax插件 一.官网:http://ricostacruz.com/nprogress/官网 github:https://github.com/rs ...
- pace.js – 加载进度条插件
这儿只是简单介绍一下这个插件pace.js. 在页面中引入Pace.js,页面就会自动监测你的请求(包括Ajax请求),在事件循环滞后,会在页面记录加载的状态以及进度情况.此插件的兼容性很好,可以兼容 ...
- 仿UC浏览器图片加载进度条
前几天用UC浏览器看新闻(无意中给UC打了广告),看到它的图片加载进度条,正好最近有时间,所以就自己写了一个. 效果图如下 进度条的底色和填充颜色都可以调整. 首先中间的笑脸作为一个整体,其实现代码如 ...
- 【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画
之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特 ...
- jQuery模拟页面加载进度条
因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...
随机推荐
- bash仅仅读的环境变量
环境变量名 变量的用途 $0 程序的名字 $1~$9 命令參数1~9的值 $* 全部命令行參数的值 $@ 全部命令行參数的值.假设$@被""包含.即"$@",这 ...
- (转) Universal-Image-Loader使用大全(史上最屌)
转载自http://blog.csdn.net/zenjj11/article/details/38728481 项目介绍: Android上最让人头疼的莫过于从网络获取图片.显示.回收,不论什么一个 ...
- 2016/06/10 日历插件 Datepicker
显示效果: <!doctype html> <html lang="en"> <head> <meta charset="utf ...
- DRF 之 路由组件
组件路由的步骤 1.先要导入DefaultRouter from rest_framework.routers import DefaultRouter 2.实例化DeaultRouter对象 rou ...
- LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP
题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...
- 初始化master节点时,日志内容分析
root@master:~/code/shell# kubeadm init --image-repository registry.aliyuncs.com/google_containers ++ ...
- JS中的存储机制
一.堆和栈的介绍 1.堆和队,是先进先出:栈,是先进后出,就跟水桶差不多: 2.存储速度:堆和队的存储速度较慢,栈的存储速度较快,会自动释放: 二.js中存储的类型 1.堆,一般用于复杂数据类型,存储 ...
- Elasticsearch分布式安装启动失败
配置config目录下的 elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "*" #分布安装. ...
- WAS:服务器停电后,重启DMGR,控制台访问不了
1. 今天有现场WAS服务器停电,重启DMGR后,控制台网页打不开: 后来得知,防火墙可能有问题.(虽然之前该机器上防火墙是关着的,但掉电后,防火墙会重启规则) 关掉防火墙后,问题解决. 2. ...
- LA-3716(sort的神用)
题意: 给出两条长度均为n的NDA链A和B,找出一段最长的字串[l,r]使得该区域的突变位置不超过p%; 思路: sum[i]表示[1,i]中不相同的个数,可得表达式(sum[i]-sum[j])/( ...
) 3x:(
)