簡體   English   中英

為什么不能在 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正在滾動,並且執行了該功能。 但是,當該函數在不同的屏幕上被激活並返回時,該函數不會被調用,刷新也不會起作用。

重現問題的步驟如下:

  1. 加載 WKwebView 頁面並執行刷新功能。
  2. 滾動到底部屏幕以查看是否有反彈。
  3. 如果它正常工作,請轉到其他屏幕。 location.href = "./other.html";
  4. 從另一個屏幕滾動到底部屏幕以查看是否有反彈。
  5. 如果沒有正常反彈,請返回屏幕。 history.back()
  6. 並再次運行刷新功能。

在我的情況下,我有一個反彈,但刷新沒有運行,並且沒有調用該函數。

有沒有人解決過和我一樣的問題? 這是bug嗎???

我想了很多關於這個問題。 所以我的結論是history.back()不會改變bounce的價值。 因此, bounce值為false

所以我想我應該重新初始化這個值。 所以我在完成頁面導航的部分添加了一個功能。

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
     if currentHtmlFileName == "Main.html" {
         scrollViewDidScroll(myWebView.scrollView)
     }
}

有了這個添加,反彈值被重新初始化,我的刷新工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM