使用 WKWebView 拉动刷新 [英] Pull to Refresh with WKWebView
问题描述
我正在尝试将下拉刷新添加到 WKWebView.我将在此代码中的何处添加一些允许我触发下拉刷新的内容?我还没有找到任何可行的方法将它添加到我的代码中,因此您不会在下面的代码中找到我尝试完成此操作的任何尝试.我找到的大多数答案都是使用 Objective-C 或我的项目不支持的语言.
I'm trying to add pull to Refresh to WKWebView. Where in this code would I add something that would allow me to trigger pull to refresh? I haven't found any viable ways to add it to my code so you won't find any attempts by me to accomplish this in the code below. Most answers that I've found are in Objective-C or a language unsupported by my project.
import UIKit
import WebKit
class CycleViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
var webView: WKWebView!
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var progressView: UIProgressView!
override func loadView() {
super.loadView()
}
override func viewDidLoad() {
super.viewDidLoad()
progressView.setProgress(0.1, animated: true)
let webConfiguration = WKWebViewConfiguration()
webConfiguration.applicationNameForUserAgent = "Version/8.0.2 Safari/600.2.5"
let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.containerView.frame.size.height))
webView = WKWebView(frame: customFrame, configuration: webConfiguration)
webView.uiDelegate = self
webView.navigationDelegate = self
self.containerView.addSubview(webView)
self.webView.translatesAutoresizingMaskIntoConstraints = false
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .trailing, relatedBy: .equal, toItem: self.containerView, attribute: .trailing, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .leading, relatedBy: .equal, toItem: self.containerView, attribute: .leading, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .top, relatedBy: .equal, toItem: self.containerView, attribute: .top, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .bottom, relatedBy: .equal, toItem: self.containerView, attribute: .bottom, multiplier: 1, constant: 0))
progressView.sizeToFit()
progressView.progressTintColor = UIColor(red: 255/255, green: 204/255, blue: 0/255, alpha: 1.0)
webView.backgroundColor = UIColor.clear
webView.backgroundColor = UIColor(red: 0.0196, green: 0.4, blue: 0.2902, alpha: 1.0)
webView.isOpaque = false
self.webView.load(NSURLRequest(url: URL(string: "https://jwelsh19.wixsite.com/countryday")!) as URLRequest)
self.webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
print(self.webView.estimatedProgress);
self.progressView.progress = Float(self.webView.estimatedProgress); }
}
@IBAction func home(_ sender: UIButton) {
let myURL = URL(string: "https://jwelsh19.wixsite.com/countryday")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
@IBAction func refresh(_ sender: UIButton) {
webView.reload()
}
//This method will call when you press button.
@objc func acButtonPressed() {
print("button is pressed")
self.performSegue(withIdentifier: "Account", sender: self)
}
}
`
推荐答案
将拉动刷新行为应用到 Web 视图没有什么特别之处,但是请记住,您需要将 UIRefreshControl
添加为Web 视图的子视图 scrollView
:
Nothing special about applying pull to refresh behavior to a web view, however keep in mind that you would need to add the UIRefreshControl
as a subview into the web view scrollView
:
override func viewDidLoad() {
// after done with setup the `webView`:
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(reloadWebView(_:)), for: .valueChanged)
webView.scrollView.addSubview(refreshControl)
}
reloadWebView
方法:
@objc func reloadWebView(_ sender: UIRefreshControl) {
webView.reload()
sender.endRefreshing()
}
<小时>
提示:而不是使用 NSURLRequest
并将其转换为 URLRequest
你可以直接使用 URLRequest
,所以的:
Tip: instead of using NSURLRequest
and casting it to URLRequest
you could use URLRequest
directly, so instead of:
self.webView.load(NSURLRequest(url: URL(string: "https://jwelsh19.wixsite.com/countryday")!) as URLRequest)
这样做:
webView.load(URLRequest(url: URL(string: "https://jwelsh19.wixsite.com/countryday")!))
这篇关于使用 WKWebView 拉动刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!