我在弄清楚如何获取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); }
}
}
答案 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()
执行初始化:
webView
中放置viewDidLoad()
的初始化,然后将两者都添加
webView
和progressView
作为视图的子视图webView
,以便
无需致电view = webView
并移动其他webView
并
改为progressView
中的viewDidLoad()
配置。