WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监听:
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];
[webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];
监听的实现方法:
- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void )context {
if ([keyPath isEqualToString:@"estimatedProgress"]) {
if (object == webView) {
[selfprogressView setAlpha:10f];
[selfprogressView setProgress:selfcurrentSubViewwebViewestimatedProgress animated:YES];
if(selfcurrentSubViewwebViewestimatedProgress >= 10f) {
[UIView animateWithDuration:03 delay:03 options:UIViewAnimationOptionCurveEaseOut animations:^{
[selfprogressView setAlpha:00f];
} completion:^(BOOL finished) {
[selfprogressView setProgress:00f animated:NO];
}];
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
else if ([keyPath isEqualToString:@"title"])
{
if (object == selfwebView) {
selftitle = selfwebViewtitle;
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
进度条增加了动画,类似safari的进度效果
注意销毁时一定要移除监听
[webView removeObserver:self forKeyPath:@"estimatedProgress"];
[webView removeObserver:self forKeyPath:@"title"];
title是写在HTML信息里<header/>标签内容。我刚才又查了遍文档,UIWebView与UIWebViewDelegate都没有直接的方法获取〜
但也可以从另外的途径获取到它的Title:
1,可以先获取URL HTML的内容,提取title再用UIWebView的 "– loadHTMLString:baseURL: " 方法加载此页面。
2,每个页面添加上一个JS角本,加载完后,跳转到另一个页面,这个页面的URL加上本页title的信息。用UIWebViewDelegate的"- (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType" 方法获取title,返回NO就可以了。
有时候项目小,为了省事,是会App内全嵌套H5的,但为了使用户体验更好,App内也会做一些修改
1在webView初始化时则循环去掉水平及竖直滑动条
2每次页面加载完成,均会调用webViewDidFinishLoad代理方法,在此判断链接是否是首页,如果是首页则不显示左上角按钮,否则显示
这里非常卡顿,尤其是界面第一次加载时特别缓慢,造成的用户使用效果就是:界面显示出好一会了,左上角的按钮才会出现或者消失
3在点击左上角返回按钮时,判断当前WebView是否可以返回,如果可以直接返回,如果不可以直接跳回首页面
区别
1需要导入头文件
2没有获取title,是自己写死的
1因为后续涉及了分享,分享出去的标题不能是写死的,需要获取H5的title
2需要有进度条
3当用户初次安装打开首页的时候(此时H5已经请求了),会d出是否使用数据,当你未选择的时候,H5是停止请求的空白的页面,当选择了允许,但H5已经停止了请求,所以必须加一个下拉刷新
4H5中有跳转AppStore的链接,WKWebView不会自动识别并去跳转
observer: 观察者对象
keyPath: 被观察的属性,其不能为nil
options: 设定通知观察者时传递的属性值,是传改变前的呢,还是改变后的
context: 一些其他的需要传递给观察者的上下文信息,通常设置为nil
2观察者接收通知,并做出处理:观察者通过实现下面的方法,完成对属性改变的响应
keyPath: 被观察的属性,其不能为nil
object: 被观察者的对象
change: 属性值,根据上面提到的Options设置,给出对应的属性值
context: 上面传递的context对象。
3移除观察者
以上就是关于如何在WKWebView中显示进度条及HTML的title全部的内容,包括:如何在WKWebView中显示进度条及HTML的title、如何监听uiwebview加载的html中title的变化、iOS前端交互篇-H5全嵌套等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)