ios导航栏透明

来源:互联网 发布:一个程序员的奋斗史39 编辑:程序博客网 时间:2024/05/11 12:04
功能需求:根新浪微博个人主页类似,下拉拉伸放大图片下拉刷新(前面文章已解决),向上滑动的时候,导航栏的透明度逐渐增加,最后变成不透明的。当然说起来感觉其实没什么,不就是滑动改变透明度吗,但是做起来完全不是你想象的那样。
首先解决透明度的问题,让导航栏透明起来,如何做呢,我刚开始的做法是根据之前的经验,直接在导航栏上贴一张透明的图片,但是由于项目原本就设置有蓝色的导航背景了,所以怎么改也改不过来,有种欲哭无泪的感觉,于是各种找原因,甚至把基类里面的东西都改了,结果不尽人意,于是在群里找大神问,终于有大神回话,给出了这篇文章,简直救命稻草,感觉作者的境况跟我类似,于是乎就认真看完,恍然大悟,原来导航条上竟然还有其他view,简直坑死人不要命,而且还没api。。。所幸作者比较强大,写了一个分类,于是我就直接取过来,然后开始设置

        [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:al]];

好了,终于透明了,当然,这句话是丢在 -(void)viewWillAppear:(BOOL)animated 里面,不然当出来的时候你会发现你的导航条还是蓝色的,只不过稍微一动就变透明了。。 第一步完成了。。。
然后在scrollerview 的代理里面设置

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    //下拉隐藏头部

    if (scrollView == self.zoneTableView) {

        constantHeaderView.hidden = scrollView.contentOffset.> -128? NO:YES;

    }

    //下拉伸伸图片

    CGFloat yOffset = scrollView.contentOffset.y+64; //如果有导航控制器,这里应该加上导航控制器的高度64

    if (yOffset < -IMAGEHEIGHT) {

        CGRect frame = _zoomImageView.frame;

        frame.origin.y = yOffset;

        frame.size.height = -yOffset;

        _zoomImageView.frame = frame;

    }

    //下拉刷新

    if (yOffset < -IMAGEHEIGHT-60) {

        [self refreshNuNuZoneInfo];

    }

    //下拉改变导航条的颜色

    float al =(yOffset + IMAGEHEIGHT)/IMAGEHEIGHT;

    if ( al <= 1) {

        [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:al]];

    }else{

        [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:1]];

    }

 

}

最下面这段就是,其他的可以当作没看见,之前有说过下拉拉伸图片和下拉刷新出现实践冲突的,就在这里解决。

下面就开始解决坑爹的玩意儿了,首先,当你点击cell跳转的时候你会发现其他页面的,你会发现其他页面的导航条变色了 0.0  你能说什么呢,改! 

- (void)viewDidDisappear:(BOOL)animated

{

    [[BaiduMobStat defaultStat] pageviewEndWithName:@"关注"];

    [super viewDidDisappear:animated];

    [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:1]];

    _topView.hidden = YES;

 

}


在这个页面消失的时候 让导航条不透明,好了,解决了 。。。

然后继续滑动,然后跳转,好了下一页颜色没变化,但是!!!返回来之后怎么又透明了???,为什么呢,原来是在viewwill 里面设置的关系,真扯淡,改改!

-(void)viewWillAppear:(BOOL)animated{

    CGFloat yOffset = zoneTableView.contentOffset.y+64;

    float al = (yOffset+IMAGEHEIGHT)/IMAGEHEIGHT;

    if (al <= 1) {

        [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:al]];

    }else{

        [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:1]];

    }

    _topView.hidden = NO;

    [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"touming"]];

    

    //开启定时器

    [_myTimer setFireDate:[NSDate distantPast]];


 

}

好了,直接改成这样就不用再乱设置什么东西了,不然当你刚滑动到半透明的时候还会出现坑爹的问题,改这玩意改了一周多,遇到蛋疼问题不计其数。。。


还有

- (void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    if (!_isShowCollect) {

        CGFloat yOffset = zoneTableView.contentOffset.y;

        float al = (yOffset+IMAGEHEIGHT)/IMAGEHEIGHT;

        if (al <= 1) {

            [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:al]];

        }else{

            [self.navigationController.navigationBar lt_setBackgroundColor:[LE_BLUE_COLORcolorWithAlphaComponent:1]];

        }

        _topView.hidden = NO;

        [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"touming"]];

        [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"touming"]];

    }

 

}


这个是其他页面遇到的问题,不想说什么了,我想静静,好累好累。。。


参考例子 http://tech.glowing.com/cn/change-uinavigationbar-backgroundcolor-dynamically/

0 0
原创粉丝点击