在WKWebView中将EstimatedProgress / ProgressView变成进度条

时间:2018-11-07 23:00:19

标签: ios swift progress-bar wkwebview uiprogressview

我在弄清楚如何获取ProgressView时遇到了麻烦,我已经将ProgressView转换成可以看到的UI进度条中的估计进度。在我的输出中,我可以清楚地看到它正在跟踪数据,但是在运行测试时,UI上没有任何显示。我想在导航栏的底部添加一个进度条。

class CycleViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

@IBOutlet var webView: WKWebView!
@IBOutlet var progressView: UIProgressView!

override func loadView() {
    let webConfiguration = WKWebViewConfiguration()
    webConfiguration.applicationNameForUserAgent = "Version/8.0.2 Safari/600.2.5"
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    view = webView

    progressView = UIProgressView(progressViewStyle: .default)
    progressView.sizeToFit()
    progressView.progressTintColor = UIColor(red: 255/255, green: 204/255, blue: 0/255, alpha: 1.0)

}

override func viewDidLoad() {
    super.viewDidLoad()

    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);        }
}

}

2 个答案:

答案 0 :(得分:2)

视图完成加载时,调用

viewDidLoad( ),而视图开始加载时,调用loadView( )。 将此代码移至ViewDidLoad

//progressView = UIProgressView(progressViewStyle: .default) // remove this line
progressView.sizeToFit()
progressView.progressTintColor = UIColor(red: 255/255, green: 204/255, blue: 0/255, alpha: 1.0)

也无需重新创建Webview。只需从情节提要中删除webview并以编程方式创建它,然后使用容器视图设置其约束即可。在情节提要中添加容器视图,该视图从进度条开始到ViewController的底部。在容器视图中添加您的Web视图。我检查了您的代码并更新了修复程序。 Download code

答案 1 :(得分:0)

似乎您是在xib的视图上添加进度条。但是,您还用WKWebView替换了loadView()中的该视图,这似乎是进度条变为nil的原因。

通常,Apple对loadView()方法声明以下内容:

  

此方法将实例化的视图从nib文件连接到视图控制器的view属性。该方法由系统调用,并在此类中公开,因此您可以覆盖它以在笔尖加载之前或之后立即添加行为。

     

请勿调用此方法。如果需要调用此方法,请访问view属性。

     

除非小心避免冗余调用,否则请勿从其他对象调用此方法。

对于您的情况,您可以考虑以下任一方法,而不是对loadView()执行初始化:

  1. webView中放置viewDidLoad()的初始化,然后将两者都添加 webViewprogressView作为视图的子视图
  2. 或者,您也可以在xib中添加webView,以便 无需致电view = webView并移动其他webView并 改为progressView中的viewDidLoad()配置。