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模拟页面加载进度条
因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...
随机推荐
- java 常量表达式
原文地址:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28 这是我翻译的,以备不时之用. 常量表达式是一个代 ...
- IOS版DesiredCapabilities参数配置
前言 相比较Android的DesiredCapabilities参数配置,IOS的相对而言比较复杂. 特别是在真机上跑的时候,参数就更加复杂. DesiredCapabilities参数配置 模拟器 ...
- thinkphp getField( )和field( )
thinkphp getField( )和field( ) 做数据库查询的时候,比较经常用到这两个,总是查手册,记不住,现在把它总结下,希望以后用的时候不查手册了. 不管是用select 查询数据 ...
- 经常使用 Java API
经常使用Java API 一. java.io.BufferedReader类(用于从文件里读入一段字符.所属套件:java.io) 1. 构造函数BufferedReader(java.io.Fil ...
- sim的准确识别技术
几个月钱,我换了一个手机,本着工科男动手能力强的原则,自己用✂️把sim卡剪成了一个小卡,然后成功的可以使用了. 然而就在昨天,我将卡拿出之后,再放回去,却无法识别我的sim卡了. 我上网查了方法,怀 ...
- python 目录下的__init__.py
1 一个目录要成为一个package必须有__init__.py文件 The __init__.py files are required to make Python treat the direc ...
- Joomla中的Task 和view 深入学习
[本文转自:梦溪笔记] Joomla 是一个优秀的CMS系统,她可以让你快速的完成一个网站的建设,她提供组件,模块,模板能够满足你大部分的网站需求.而组件在其中举足轻重. 一.基本知识 组件(comp ...
- Java面试手写代码题
1.栈实现 2.Iterator实现 3.单例 4.多线和控制(暂停,恢复,停止) 5.生产者消费者
- POJ3045 Cow Acrobats —— 思维证明
题目链接:http://poj.org/problem?id=3045 Cow Acrobats Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- vue中使用axios post上传头像/图片并实时显示到页面
在前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: <div id="myPhoto ...
) 3x:(
)