博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS-UIWebView添加头部和尾部
阅读量:6980 次
发布时间:2019-06-27

本文共 3157 字,大约阅读时间需要 10 分钟。

hot3.png

前言

项目中使用UIWebView显示本地或者是服务器上的页面很容易,但是仅限于显示页面,可控性并不高,如果有需要在头部和尾部加上原生的view,显示部分信息相对于全部使用UIWebView来说会好蛮多,下面开始实现添加逻辑;

 

(一)在UIWebView的子控件Scrollview中添加头部以及尾部,添加头部相对于来说简单,先设置Scrollview的contentInset属性,UIEdgeInsetsMake(50, 0, 0, 0)即显示内容下移50;然后添加一个自定义view,frame等于CGRectMake(0, -50, self.view.frame.size.width, 50)即可。尾部的话,会复杂点,主要是UIWebView的contentSize会变,所以首先要知道contentSize或者说是内容的高度,方法是使用KVO监听UISCrollview的contentSize属性,这个方法我也是从网上找到的,原来我的想法是,通过UIScrollView的- (void)scrollViewDidScroll:(UIScrollView *)scrollView,根据下拉的offsety来控制尾部view的显示,但是后面发现不可行,所以才找到了这个KVO的方法;下面看代码:

- (void)viewDidLoad{    [super viewDidLoad];       self.webss = [[UIWebView alloc] initWithFrame:self.view.bounds];    self.webss.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);    [self.webss loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];    self.webss.backgroundColor = [UIColor whiteColor];    self.webss.opaque = NO;        UIImageView *headerView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -50, self.view.frame.size.width, 50)];    headerView.userInteractionEnabled = YES;    headerView.backgroundColor = [UIColor redColor];        [self.webss.scrollView addSubview:headerView];    [self.view addSubview:_webss];}- (void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];    [self addObserverForWebViewContentSize];}- (void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];    [self removeObserverForWebViewContentSize];}- (void)addObserverForWebViewContentSize{    [self.webss.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];}- (void)removeObserverForWebViewContentSize{    [self.webss.scrollView removeObserver:self forKeyPath:@"contentSize"];}- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary
*)change context:(void *)context{ [self test];}//设置footerView,并计算合适位置;- (void)test{ //取消监听,因为这里会调整contentSize,避免无限递归 [self removeObserverForWebViewContentSize]; UIView *viewss = [self.view viewWithTag:99999]; [viewss removeFromSuperview]; CGSize contentSize = self.webss.scrollView.contentSize; UIView *vi = [[UIView alloc] init]; vi.backgroundColor = [UIColor blueColor]; vi.userInteractionEnabled = YES; vi.tag = 99999; vi.frame = CGRectMake(0, contentSize.height, self.view.frame.size.width, 150); [self.webss.scrollView addSubview:vi]; self.webss.scrollView.contentSize = CGSizeMake(contentSize.width, contentSize.height + 150); //重新监听 [self addObserverForWebViewContentSize];}

以上的代码是实现的关键代码,KVO机制我就不说了,还有一个关键的地方就是UIView *viewss = [self.view viewWithTag:99999];[viewss removeFromSuperview];两句代码,contentSize有可能变,有可能不变;只能保留通过监听到的最后一次contentSize计算出来的位置,否则尾部自定义的view会显示不正确。

 

(二)改进demo的一些想法;

在下拉UIwebview的过程中,也会显示灰色的背景色,相当的难看;基于上面的demo,已经实现了头部与尾部的添加,把头部的高度与下拉的距离同步起来,在这个UIScrollView的- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法中,计算出offsety,然后头部自定义view的frame等于CGRectMake(0, -50-offsety, self.view.frame.size.width, 50+offsety),应该就可以达到效果了。

转载于:https://my.oschina.net/u/1450995/blog/688328

你可能感兴趣的文章
tar命令常用参数解释
查看>>
SourceTree跳过Atlassian账号,免登陆,跳过初始设置
查看>>
刷屏的海底捞超级APP究竟是怎样与阿里云合作的
查看>>
redhat linux 访问控制
查看>>
DNS--1--基础概念
查看>>
万能的model数据选择列表
查看>>
FreeCodeCamp:Return Largest Numbers in Arrays
查看>>
C#接口
查看>>
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
查看>>
敏捷开发团队管理系列之一:序言与出发点
查看>>
挂载磁盘出错
查看>>
Git详解之三 Git分支
查看>>
我的友情链接
查看>>
洛谷——P1403 [AHOI2005]约数研究
查看>>
为什么硬盘只能有四个主分区
查看>>
IT十八掌掌第二天课程总结
查看>>
职业SNS天际网:透视“屌丝文化” 解析当今职场
查看>>
Leetcode 29. Divide Two Integers
查看>>
Kubernetes 1.5集成heapster
查看>>
清华赵骥主任与CIO石海军研讨互联网信息化
查看>>