TEAM LICENSES: Save money and learn new skills through a Hacking with Swift+ team license >>

SOLVED: WEBVIEW DOES NOT SHOW CHANGES

Forums > SwiftUI

Hi again!

Please, I have embeded webpages in the app to make it easier to update and such. But, whenever I update the website that is embeded and publish it, I can't see the changes in the app until I uninstall and reinstall the app.

Can anyone kindly help me?

Many thanks.

This is the code I use for the Webview:

   struct Webview: UIViewControllerRepresentable {
        let url: URL
        func makeUIViewController(context: Context) -> WebviewController {
            let webviewController = WebviewController()
            let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad)
            webviewController.webview.load(request)
            return webviewController
        }
        func updateUIViewController(_ webviewController: WebviewController, context: Context) {
            //
        }
    }

    class WebviewController: UIViewController, WKNavigationDelegate {
        lazy var webview: WKWebView = WKWebView()
        lazy var progressbar: UIProgressView = UIProgressView()
        deinit {
            self.webview.removeObserver(self, forKeyPath: "estimatedProgress")
            self.webview.scrollView.removeObserver(self, forKeyPath: "contentOffset")
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            self.webview.navigationDelegate = self
            self.view.addSubview(self.webview)
            self.webview.frame = self.view.frame
            self.webview.translatesAutoresizingMaskIntoConstraints = false
            self.view.addConstraints([
                self.webview.topAnchor.constraint(equalTo: self.view.topAnchor),
                self.webview.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
                self.webview.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                self.webview.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
            ])
            self.webview.addSubview(self.progressbar)
            self.setProgressBarPosition()
            webview.scrollView.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
            self.progressbar.progress = 0.1
            webview.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
        }
        func setProgressBarPosition() {
            self.progressbar.translatesAutoresizingMaskIntoConstraints = false
            self.webview.removeConstraints(self.webview.constraints)
            self.webview.addConstraints([
                self.progressbar.topAnchor.constraint(equalTo: self.webview.topAnchor, constant: self.webview.scrollView.contentOffset.y * -1),
                self.progressbar.leadingAnchor.constraint(equalTo: self.webview.leadingAnchor),
                self.progressbar.trailingAnchor.constraint(equalTo: self.webview.trailingAnchor),
            ])
        }
        // MARK: - Web view progress
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            switch keyPath {
            case "estimatedProgress":
                if self.webview.estimatedProgress >= 1.0 {
                    UIView.animate(withDuration: 0.3, animations: { () in
                        self.progressbar.alpha = 0.0
                    }, completion: { finished in
                        self.progressbar.setProgress(0.0, animated: false)
                    })
                } else {
                    self.progressbar.isHidden = false
                    self.progressbar.alpha = 1.0
                    progressbar.setProgress(Float(self.webview.estimatedProgress), animated: true)
                }
            case "contentOffset":
                self.setProgressBarPosition()
            default:
                super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
            }
        }
    }

   

Anyone to help, please?

   

Not something I have actually done, so factor that in. Looking at the code, I see you have a cachePolicy to return the cached data, so my assumption would be that the page you are loading is cached by iOS and you're getting that back. Have you tried changing the cache policy to always fetch... may not be an ideal solution but would be a good test to see if thats the problem.

   

I see... I have been thinking of the cache too... should I just leave it as,

let request = URLRequest(url: self.url)

   

Hacking with Swift is sponsored by RevenueCat.

SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure your entire paywall view without any code changes or app updates.

Learn more here

Sponsor Hacking with Swift and reach the world's largest Swift community!

Reply to this topic…

You need to create an account or log in to reply.

All interactions here are governed by our code of conduct.

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.