iOS Swift 3 WKWebView 进度条不显示
iOS Swift 3 WKWebView Progress Bar Not Displaying
我正在尝试创建一个 iOS WebView 应用程序来加载网站并允许用户登录并进行购买。我试图在加载页面时显示进度条,但进度根本不显示,我不确定哪里出错了。我也有刷新视图的拉动功能,但没有进度条,我也不确定这是否有效。这是我的代码,如有任何帮助,我们将不胜感激!
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
// Define Views
var webView: WKWebView!
var progressView: UIProgressView!
override func loadView() {
// Load Initial WebView
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
// Create Progress View
progressView = UIProgressView(progressViewStyle: .default)
progressView.sizeToFit()
let progressButton = UIBarButtonItem(customView: progressView)
toolbarItems = [progressButton]
navigationController?.isToolbarHidden = false
//Set and Load Initial URL
let url = URL(string: "https://shop.nygmarose.com/")!
webView.load(URLRequest(url: url))
// Set WebView Config
webView.allowsBackForwardNavigationGestures = true
webView.scrollView.isScrollEnabled = true
webView.scrollView.bounces = true
// Allow Scroll to Refresh
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView), for: UIControlEvents.valueChanged)
webView.scrollView.addSubview(refreshControl)
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
}
func refreshWebView() {
// On Scroll to Refresh, Reload Current Page
webView.reload()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// Display Progress Bar While Loading Pages
if keyPath == "estimatedProgress" {
progressView.progress = Float(webView.estimatedProgress)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}}
我已经检查了你的代码,它运行完美,检查这里是输出
让我知道更多。
有考虑强制使用主线程吗? UI 仅保证在主线程上进行更新。
例如:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// Display Progress Bar While Loading Pages
if keyPath == "estimatedProgress" {
// force main thread async call
DispatchQueue.main.async(execute: {
// do UI update
progressView.progress = Float(webView.estimatedProgress)
})
}
}
我正在尝试创建一个 iOS WebView 应用程序来加载网站并允许用户登录并进行购买。我试图在加载页面时显示进度条,但进度根本不显示,我不确定哪里出错了。我也有刷新视图的拉动功能,但没有进度条,我也不确定这是否有效。这是我的代码,如有任何帮助,我们将不胜感激!
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
// Define Views
var webView: WKWebView!
var progressView: UIProgressView!
override func loadView() {
// Load Initial WebView
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
// Create Progress View
progressView = UIProgressView(progressViewStyle: .default)
progressView.sizeToFit()
let progressButton = UIBarButtonItem(customView: progressView)
toolbarItems = [progressButton]
navigationController?.isToolbarHidden = false
//Set and Load Initial URL
let url = URL(string: "https://shop.nygmarose.com/")!
webView.load(URLRequest(url: url))
// Set WebView Config
webView.allowsBackForwardNavigationGestures = true
webView.scrollView.isScrollEnabled = true
webView.scrollView.bounces = true
// Allow Scroll to Refresh
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView), for: UIControlEvents.valueChanged)
webView.scrollView.addSubview(refreshControl)
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
}
func refreshWebView() {
// On Scroll to Refresh, Reload Current Page
webView.reload()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// Display Progress Bar While Loading Pages
if keyPath == "estimatedProgress" {
progressView.progress = Float(webView.estimatedProgress)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}}
我已经检查了你的代码,它运行完美,检查这里是输出
让我知道更多。
有考虑强制使用主线程吗? UI 仅保证在主线程上进行更新。
例如:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// Display Progress Bar While Loading Pages
if keyPath == "estimatedProgress" {
// force main thread async call
DispatchQueue.main.async(execute: {
// do UI update
progressView.progress = Float(webView.estimatedProgress)
})
}
}