美文网首页iOS开发专题iOS备忘录iOS菜鸟级开发
在UIWebView 上面添加一个头视图 让它能随webView

在UIWebView 上面添加一个头视图 让它能随webView

作者: 相关函数 | 来源:发表于2016-02-03 18:13 被阅读8154次

    UIWebView是iOS sdk中一个最常用的控件。它是一个内置的浏览器控件,我们可以用它来浏览网页、打开文档等等.

    UIWebView可以用来向用户展示一些网页信息,在我们进行开发的时候,通常会想在这个Controller上面添加一个headerView用来展示标题或者图片 ,那么我们此时就会遇到一个问题,就是怎么在一个webView上面添加头视图.

    我在网上搜过这个问题,很多人说直接在webView的scrollView上添加一个View.这样确实可以实现在webView上添加头视图,但是这样的话会导致一个问题就是,这个heardView会遮挡住webView上显示的内容,也就是说,headerView其实是直接加在webView上面的,它并不是webView的一部分.

    此时我们有着这样的需求,就是我们需要让这个头视图显示在加载出来的网页的上面,能随着webView进行滚动.这样该怎么办呢?

    我们通过官方的API可以知道其实在UIWebView中是有一个UIScrollView的属性的.

    图片1

    实际上,webView之所以能够显示这么多的内容,而且可以滚动就是因为这个scrollView的属性.那么我们就可以从这个地方下手来实现我们想要的效果.


    比如说,此时我们想在加在的webView上面添加一张图片作为标题.图片的高度我们设置为240.

    首先,我们在视图上添加完webView之后,我们将webView的scrollView的的contentInset设置一下,contentInset可以在四周增加滚动范围.

    // 添加额外的滚动附近区域的内容
        _webView.scrollView.contentInset = UIEdgeInsetsMake(240, 0, 0, 0);
    

    注意:UIEdgeInsetsMake的值依次设置为:上,左,下,右

    设置完成之后,scrollView的滚动范围就成增加了240.这样我们就可以在这个页面的frame的y轴的-240的地方添加随意视图了.比如在这里我们添加一个imageView.

    // 在webView上添加一个imgView 在 imgView上添加一个label
        UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.jpg"]];
        imgView.frame = CGRectMake(0, -240, _webView.frame.size.width, 240);
        [_webView.scrollView addSubview:imgView];
    

    我们解析一个本地的HTML数据,用webView来展示

    NSString *pathFile = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"];
    NSString *htmlString = [NSString stringWithContentsOfFile:pathFile encoding:NSUTF8StringEncoding error:nil];
    [_webView loadHTMLString:htmlString baseURL:nil];
    

    ok,这样就是现在在UIWebView上添加一个头视图,并且让它可以随着scrollView滚动.

    如下图:

    图片2

    相关文章

      网友评论

      • 浮动跳跃:-(void)webViewDidFinishLoad:(UIWebView *)webView{
        //网页加载完成调用此方法


        /* 把weView高度设置为1,计算滚动高度 */
        CGRect frame = _webView.frame;
        frame.size.height = 1;
        _webView.frame = frame;
        CGSize fittingSize = [_webView sizeThatFits:CGSizeZero];
        frame.size = fittingSize;

        CGFloat Y = fittingSize.height;


        /* 还原weView frame */
        _webView.frame = CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT);
        NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);

        /* 添加footerView */
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0, Y, SCREENWIDTH, 200);
        button.backgroundColor = [UIColor redColor];
        // [button addTarget:self action:@selector(buttonHeaderAction) forControlEvents:UIControlEventTouchUpInside];
        [_webView.scrollView addSubview:button];
        //
        _webView.scrollView.subviews[0].frame = CGRectMake(0, 0, SCREENWIDTH, Y + 200);

        }
        风雪山神喵:意外的收获,mark,谢谢大佬
        浮动跳跃:footerView .
      • 我小名好看:如果在视图上添加按钮能响应时间吗?
        相关函数:@我小名好看 可以的
      • superGM:这样做以后,会出现一个问题,下拉放大功能好像加不上了
        相关函数:@superGM 可以加上,通过滚动视图获取到滚动偏移量从而去改变添加上的head视图的frame就行了
      • 饶伟博:请问一下。我用你的这种方法添加的头部视图。我尝试往头部视图中添加按钮或者文本都无法显示是什么原因。如果将控件添加在webview上。那个控件又无法跟随着一起移动。固定在一个位置了
        饶伟博:@CoderQiao addsubview方法直接添加上去。我用你的方法在头部先添加了一个空白view,再尝试添加按钮跟文本,都无法显示。然后我添加在webview上,这时候可以显示。但是就是不跟随滚动。全程固定在屏幕的一个地方。
        相关函数:@饶伟博 可以添加 你是怎么添加的
      • footSInRoad:大神,请教一下如何下尾部视图啊?
        :relaxed:
      • 我是滕先生:现在发现了一个问题,如果设置底部内边距会导致webview上下面的一些链接无法点击,往上滑动一下就可以点了,还不清楚什么原因。
        8ab8a4bc7c3e:是有这个问题,后来解决了么,在window上偏移的那部分区域无法响应事件
      • 我是滕先生:看了那么多解决办法,就你这个好使,😄 感谢~!!!
        相关函数:@滕先洪 共同学习
      • c78142e1ff6f:这样虽然可以 但是每次跳转到这个页面的时候 下方会多出一块黑色区域一闪而过 请问这种情况如何解决呢
        白牛桑:@幽云曼谷 谢谢,真的没有黑色块了
        8b06ab09757b:@c78142e1ff6f 我解决了,希望帮到其他人 web.backgroundColor = [UIColor clearColor];
        web.opaque = NO;
        8b06ab09757b:@c78142e1ff6f 我也出现了一样的问题,请问你解决了吗?
      • 小凡凡520:good mark
      • 773f0db0e614:怎么加一个尾部视图呢?
        搜捕儿:@LoveandHope 能不能解释具体一些呢, 如何给webview加一个尾部视图?
        讨厌下雨的鱼:@LC_ 增加尾部内边距就好了

      本文标题:在UIWebView 上面添加一个头视图 让它能随webView

      本文链接:https://www.haomeiwen.com/subject/efjekttx.html