From 9cb75817e5f56695e6bf67e4112ae87bb1ae1930 Mon Sep 17 00:00:00 2001 From: "Xinlei(Ryan) Pan" Date: Wed, 1 Apr 2020 19:15:49 -0400 Subject: [PATCH] check previous content --- MVMCoreUI/Atomic/Atoms/Views/WebView.swift | 41 +++++++++++++++++----- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/WebView.swift b/MVMCoreUI/Atomic/Atoms/Views/WebView.swift index 6e22d3f5..72c8c33a 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/WebView.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/WebView.swift @@ -27,6 +27,10 @@ import WebKit super.setupView() createWebView(messageHandler: mvmWebViewMessageHandler) pinSpinnerView() + + //init height for loading spinner + webViewHeight = webView?.heightAnchor.constraint(equalToConstant: 44) + webViewHeight?.isActive = true } func createWebView(messageHandler: String?) { @@ -44,24 +48,37 @@ import WebKit addSubview(webView) NSLayoutConstraint.constraintPinSubview(toSuperview: webView) } - // MARK: - MVMCoreUIMoleculeViewProtocol override open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { + + //store the previous webview properties + let previousHtmlString = webviewModel?.htmlString + let previousURL = webView?.url + super.set(with: model, delegateObject, additionalData) self.delegateObject = delegateObject - //init height for loading spinner - webViewHeight = webView?.heightAnchor.constraint(equalToConstant: 44) - webViewHeight?.isActive = true if let height = webviewModel?.height { webViewHeight?.constant = height dynamicHeight = false } if let url = webviewModel?.url { - webView?.load(URLRequest(url: url)) + if let previousUrl = previousURL, url == previousUrl { + //dont load the new + } else { + webView?.load(URLRequest(url: url)) + webViewHeight?.constant = 44 + loadingSpinner.resumeSpinner() + } } else if let htmlString = webviewModel?.htmlString { - webView?.loadHTMLString(htmlString, baseURL: nil) + if let previousHTML = previousHtmlString, previousHTML == htmlString { + //dont load the new html since they are the same html string as preivous + } else { + webViewHeight?.constant = 44 + webView?.loadHTMLString(htmlString, baseURL: nil) + loadingSpinner.resumeSpinner() + } } if let borderColor = webviewModel?.borderColor?.cgColor { @@ -105,8 +122,16 @@ extension WebView : WKUIDelegate { */ if !webView.isLoading { webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { [weak self] (result, error) in - guard let self = self, let height = result as? CGFloat else { return } - self.webViewHeight?.constant = height + guard let self = self else { + return + } + if let height = result as? CGFloat { + self.webViewHeight?.constant = height + } else { + //if failed to get height from javascript, using scrollview.contensize's height + let scrollHeight = self.webView?.scrollView.contentSize.height + self.webViewHeight?.constant = scrollHeight ?? 44 + } self.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self) }) }