fak*_*sgy 34 objective-c ios wkwebview wkwebviewconfiguration
我想使用WkWebView加载HTML页面,我想在加载完成后显示页面.只要它正在加载我想在空视图上显示活动指示器.我创建了两个视图,一个loadingView和一个wkWebView.当页面加载时我将VC添加为子视图loadingView,之后我想删除loadingView并添加wkWebView.这是我的代码:
[self addSubview:_loadingView];
_wkWebView = [[WKWebView alloc] initWithFrame:self.frame];
_wkWebView.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
//Send a request to wkUrlconnection
NSURL *wkUrl = [NSURL URLWithString:self.wkUrlString];
NSURLRequest *wkRequest = [NSURLRequest requestWithURL:wkUrl];
//Here I want to check if it's loaded and then remove loadingView and add wkWebView
[_wkWebView loadRequest:wkRequest];
[self.loadingView removeFromSuperview];
[self addSubview:_wkWebView];
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何在加载时检查,如果完成刷新VC?谢谢您的回答.
Sta*_*ash 56
我认为你WKNavigationDelegate的webView:didFinishNavigation:委托回调是你正在寻找的.
在开始加载时配置并显示活动指示符,然后在调用回调时停止并将其从视图中删除.
对于任何遇到包含多个框架的网页并因此进行多次加载(这会干扰您的加载动画)的问题的人,我已经实现了以下方法,并且该方法在迄今为止遇到的所有情况下都对我有用:
Swift 4.2:
var loadCount = 0
override func viewDidLoad() {
super.viewDidLoad()
startLoading()
webview.navigationDelegate = self
let request = URLRequest(url: url)
webview.load(request)
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
loadCount += 1
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
loadCount -= 1
DispatchQueue.main.asyncAfter(deadline: .now()+0.1) {
if (self.loadCount == 0) {
self.stopLoading()
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本思想是在请求url之前启动加载动画,然后对每个请求进行计数,仅在请求计数== 0时才停止加载动画。这是在稍有延迟之后完成的,因为我发现有些帧排队了同步请求,因此下一个加载将在0.1秒延迟完成之前开始。
(?°???°)
快速4.2:
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!){
print("loaded")
}
Run Code Online (Sandbox Code Playgroud)
确保在didLoad(或类似方法)中为webView设置委托
webView.navigationDelegate = self
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27328 次 |
| 最近记录: |