[iOS]给UIWebView头尾插入自定义View

2012-2-25

src与demo:https://github.com/bang590/iOSPlayground/tree/master/TWebview

经常有这样的需求:需要给webview头部加个自定义view,这个view不是固定的而是要跟webview一起滚动。例如iMail里的读邮件页面,头部有收件人等信息,下面是一个webview。如浏览器,顶部的地址栏要随页面滚动。如阅读类软件,需要给正文上面加一个标题。

实现方法可以通过设webview里scrollView的contentInset,在头部留好自定义view的空间,再把view添加进来,随着webview的滚动缩放细调这个view的位置。这里把这些行为封装了起来做成一个扩展的UIWebView,主要解决的问题是:

1.直接通过设headerView和footerView完成头尾view的插入。
2.webView滚动和缩放时自动调整headerView和footerView的位置,使之看起来自然。
3.提供接口实现头部高度改变时进行动画

有个问题未解决:

设置contentInset后,webview顶点的Y坐标不是0,而是小于0的一个数(负的headerView的高度) 。
在webview跳转页面时,会自动滚动到(0,0)位置,也就是跳到webview内容的顶部,也就是这时候headerView被隐藏了。

从调用堆栈来看这次跳转是私有的UIWebDocumentView调起,无法截获阻止。只能在触发scrollViewDidScroll时让它跳回去。但还没找到方法判断什么时候该跳什么时候不该跳。

分类:技术文章 Tags:
评论

2012年7月26日 15:20

文章里的demo地址打不开,求demo。。。。。

2012年7月26日 16:21

github怎么会打不开

2012年7月27日 17:28

下载了 貌似程序跑不起来

2012年11月12日 14:28

你好,为什么WEBVEW点击返回后,WEBVIEW底下会出现一个黑条,随着多次点击返回后黑条高度会越来越大。