2019独角兽企业重金招聘Python工程师标准>>>

前言

项目中使用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<NSString *,id> *)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

iOS-UIWebView添加头部和尾部相关推荐

  1. ListView 添加头部 和尾部 布局 (addHeaderView 和 addFooterView)

    ListView 添加头部 和尾部 布局  其实很简单 ,listview 暴露的有方法addHeaderView 和 addFooterView 从源码里面可以看到, addHeaderView 和 ...

  2. RecyclerView的使用(二):添加头部和尾部

    前言 Recyclerview作为Android的常用控件之一,相信大家对它应该是十分熟悉了,不熟悉的朋友可以参考我之前发的文章 RecyclerView的基本使用,其中包括有单item及多Item的 ...

  3. Android 给RecyclerView添加头部和尾部

    之前我在GitHub上开源了一个可以实现RecyclerView列表分组的通用Adapter: GroupedRecyclerViewAdapter.也在博客上写了一篇专门介绍它的实现和使用的文章:& ...

  4. Android ListView添加头部和尾部

    ListView添加头部和尾部: 头部布局:addHeaderView 尾部布局:addFooterView 使用java代码: //添加头部final View header = View.infl ...

  5. 超实用BRVAH开源框架使用之添加头部尾部问题

    小白入坑,大佬轻喷~~ 参考: BRVAH官方使用指南(持续更新) Github地址 前言: BRVAH是一个强大的RecyclerViewAdapter开源库,代码简洁高效,优点如下: ·框架引入 ...

  6. recycleview 使用详解,添加头部尾部,混合item,侧滑菜单,跳转到指定位置,实现九宫格布局

    添加头部尾部,混合item:https://blog.csdn.net/meixi_android/article/details/82256319 侧滑菜单:https://blog.csdn.ne ...

  7. Android recycleview实现混合itemview,以及recycleview添加头部尾部

    需要引入的module链接:https://pan.baidu.com/s/1kcVye2vT4M0mdCtzYpUVKw 添加module方法步骤:https://blog.csdn.net/mei ...

  8. vue引用公用的头部和尾部文件。

    我创建了一个header.vue和fotter.vue,用来做于网站的头部和尾部,每个页面都需要引用这两个,我以组件的方式,来引用这样只需要添加注册的组件就可以了. 第一步.在components文件 ...

  9. php中连接网页头尾部,网页共用头部和尾部的部分方法

    同一网站的头部和尾部通常是相同的,所有网页只要共用头部和尾部就可以使网页的维护变得方便许多,只需要修改一个页面就可以使全部网页的头部和尾部改变了,在这里我尝试使用与课程相关的几种不同方法来实现: 方法 ...

最新文章

  1. 【CentOS Linux 7】实验1【VMware安装、新建虚拟机;63个基础命令运行结果图】
  2. Sql Server中实现Mysql中的group_concat函数效果
  3. java类的实现_java类的实现
  4. ios开发之 -- 自动轮播图创建
  5. 带有JWT示例的​​Spring Oauth2
  6. 实例5:python
  7. MySQL 服务挂了 CPU 消耗接近 100% 你知道怎么回事吗???
  8. 如何利用pandas将时间戳格式化日期字符串呢?
  9. JDRefresh 轻简下拉刷新框架
  10. 【编程之美】java二进制实现重建
  11. MapGuide Windows编译
  12. 打孔式计算机,矩阵式打孔计算机3005-D型
  13. 2017腾讯暑期实习生从笔试到面试总结(附带华为、阿里面试经历)
  14. 查看正在运行python进程_查找Python中每个正在运行的进程的路径 - python
  15. HCIA网络基础7-VRP和命令行基础
  16. Linux Ubuntu快捷键技巧
  17. eclipse jvm_一种与众不同的JVM语言:Eclipse Xtend(现在适用于Android)
  18. 非真实感渲染(NPR)论文理解及其复现(Unity) - 《Stylized Highlights for Cartoon Rendering and Animation》
  19. css3 火焰文字,Css3字体做出火焰效果的实现步骤
  20. Instagram 账号被封如何申诉拿回账号?ins账号解封经验分享

热门文章

  1. java 反射 动态代理
  2. IBatis.Net学习笔记九--动态选择Dao的设计分析
  3. 016-热更新之FishingJoy一
  4. Java并发编程(一)Thread详解
  5. ubuntu16.04 ROS安转及RVIZ启动
  6. 比较v-bind和v-model
  7. linux学习-awk工具
  8. vijos - P1279Leave-绿光(数学归纳法 + python)
  9. Android预安装可卸载程序
  10. 【Unity】使用Resources类管理资源