导航:

1.加载进度条

2.导航栏增加返回、关闭按钮


加载进度条

效果图

代码如下:

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)的更多相关文章

  1. iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26

    1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...

  2. 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)

    // // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...

  3. bootstrap课程9 bootstrap如何实现动画加载进度条的效果

    bootstrap课程9 bootstrap如何实现动画加载进度条的效果 一.总结 一句话总结:在bootstrap进度条的基础上添加js(定时器),动态的改变进度条即可.很简单的. 1.路径导航是什 ...

  4. css3 linear-gradient实现页面加载进度条效果

    最终效果图: html结构: <div>    <p class="p1">        <span></span>    < ...

  5. ajax页面加载进度条插件

    下面两个都是youtube视频的加载进度条效果的ajax插件 一.官网:http://ricostacruz.com/nprogress/官网 github:https://github.com/rs ...

  6. pace.js – 加载进度条插件

    这儿只是简单介绍一下这个插件pace.js. 在页面中引入Pace.js,页面就会自动监测你的请求(包括Ajax请求),在事件循环滞后,会在页面记录加载的状态以及进度情况.此插件的兼容性很好,可以兼容 ...

  7. 仿UC浏览器图片加载进度条

    前几天用UC浏览器看新闻(无意中给UC打了广告),看到它的图片加载进度条,正好最近有时间,所以就自己写了一个. 效果图如下 进度条的底色和填充颜色都可以调整. 首先中间的笑脸作为一个整体,其实现代码如 ...

  8. 【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画

    之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特 ...

  9. jQuery模拟页面加载进度条

    因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...

随机推荐

  1. iOS Webview 与 app交互

    有时候我们在内嵌的webview中希望点击一个链接之后,触发iOS原生事件,而不是webview内页面跳转(因为webview的跳转很生硬,而ajax+js模拟则不如原生segue平滑). 有时候我们 ...

  2. linux 输入子系统(3) button platform driver

    button platform driver 一般位于driver/input/keyboard/gpio_keys.c /*用于按键事件的上报,它将在按键的中断发生后被调用.其中逻辑就是获取到按键类 ...

  3. win7 64位安装vs2013 出现'System.AccessViolationException的错误

    用管理员身份运行CMD,输入netsh winsock reset并回车(注意,必须是已管理员身份运行,这个重置LSP连接)

  4. js中!~什么意思

    (function () { var names = []; return function (name) { addName(name); } function addName(name) { if ...

  5. iOS webView的常见属性和方法

    一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)load ...

  6. Delphi语言最好的JSON代码库 mORMot学习笔记1(无数评论)

    mORMot没有控件安装,直接添加到lib路径,工程中直接添加syncommons,syndb等到uses里 --------------------------------------------- ...

  7. RandomUtils

    package com.cc.hkjc.util; import java.util.Random; public class RandomUtils {    /**     * 获取count个随 ...

  8. hdu2552

    点击打开链接 思路: 1.tan(a+b) = ( tan(a) + tan(b) ) / (1 – tan(a) * tan(b) ) 2.tan( atan(x) ) = x arctan(1/s ...

  9. VC++编译说明

    目录 第1章编译步骤    1 第2章编译源文件    2 2.1 编译器    2 2.2 包含头文件    3 2.3 重复包含    6 2.4 预编译头文件    7 2.4.1 创建     ...

  10. 线段树之成段更新( 需要用到延迟标记,简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候)

    HDU  1698 链接:  http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直 ...