为什么不在 Swift 中使用 UIRefreshControl?
Why do not working UIRefreshControl in Swift?
我在WKWebview
中使用了刷新功能。执行刷新时功能正常。但是当我加载另一个 html
文件并返回时,它没有刷新。
@IBOutlet var myWebView: WKWebView!
var refController:UIRefreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
myWebView.uiDelegate = self
myWebView.navigationDelegate = self
myWebView.scrollView.delegate = self
refController.bounds = CGRect.init(x: 0.0, y: 50.0, width: refController.bounds.size.width, height: refController.bounds.size.height)
refController.addTarget(self, action: #selector(self.webviewRefresh(refresh:)), for: .valueChanged)
myWebView.scrollView.addSubview(refController)
...
}
@objc func webviewRefresh(refresh:UIRefreshControl){
refController.endRefreshing()
myWebView.reload()
}
extension mainWebViewController: UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("come in ??")
if currentHtmlFileName == "Main.html" {
scrollView.bounces = (scrollView.contentOffset.y <= 0)
} else {
scrollView.bounces = false
}
}
}
从我的代码可以看出,我的WKWebview
是滚动的,执行的是函数。但是,当该功能在不同的屏幕上激活并 returned 时,该功能不会被调用,刷新也不会工作。
重现问题的步骤如下:
- 加载WKwebView页面并执行刷新功能
- 滚动到底部屏幕,查看是否有弹跳。
- 如果正常,请转到其他屏幕。
location.href = "./other.html";
- 从另一个屏幕滚动到底部屏幕,看看是否有
反弹。
- 如果没有正常弹跳,请return到屏幕。
history.back()
- 并且运行再次刷新功能。
我的情况是有跳出,但是刷新没有运行,也没有调用函数
有没有人解决过和我一样的问题?这是一个错误吗???
这个问题我想了很多。所以我的结论是history.back()
不会改变bounce
的值。因此,bounce
的值为 false
.
所以我想我应该重新初始化这个值。所以我在完成页面导航的部分添加了一个功能
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if currentHtmlFileName == "Main.html" {
scrollViewDidScroll(myWebView.scrollView)
}
}
有了这个添加,反弹值被重新初始化,我的刷新成功了。
我在WKWebview
中使用了刷新功能。执行刷新时功能正常。但是当我加载另一个 html
文件并返回时,它没有刷新。
@IBOutlet var myWebView: WKWebView!
var refController:UIRefreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
myWebView.uiDelegate = self
myWebView.navigationDelegate = self
myWebView.scrollView.delegate = self
refController.bounds = CGRect.init(x: 0.0, y: 50.0, width: refController.bounds.size.width, height: refController.bounds.size.height)
refController.addTarget(self, action: #selector(self.webviewRefresh(refresh:)), for: .valueChanged)
myWebView.scrollView.addSubview(refController)
...
}
@objc func webviewRefresh(refresh:UIRefreshControl){
refController.endRefreshing()
myWebView.reload()
}
extension mainWebViewController: UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("come in ??")
if currentHtmlFileName == "Main.html" {
scrollView.bounces = (scrollView.contentOffset.y <= 0)
} else {
scrollView.bounces = false
}
}
}
从我的代码可以看出,我的WKWebview
是滚动的,执行的是函数。但是,当该功能在不同的屏幕上激活并 returned 时,该功能不会被调用,刷新也不会工作。
重现问题的步骤如下:
- 加载WKwebView页面并执行刷新功能
- 滚动到底部屏幕,查看是否有弹跳。
- 如果正常,请转到其他屏幕。
location.href = "./other.html";
- 从另一个屏幕滚动到底部屏幕,看看是否有 反弹。
- 如果没有正常弹跳,请return到屏幕。
history.back()
- 并且运行再次刷新功能。
我的情况是有跳出,但是刷新没有运行,也没有调用函数
有没有人解决过和我一样的问题?这是一个错误吗???
这个问题我想了很多。所以我的结论是history.back()
不会改变bounce
的值。因此,bounce
的值为 false
.
所以我想我应该重新初始化这个值。所以我在完成页面导航的部分添加了一个功能
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if currentHtmlFileName == "Main.html" {
scrollViewDidScroll(myWebView.scrollView)
}
}
有了这个添加,反弹值被重新初始化,我的刷新成功了。