ios导航栏透明的十万个坑爹问题

功能需求:根新浪微博个人主页类似,下拉拉伸放大图片下拉刷新(前面文章已解决),向上滑动的时候,导航栏的透明度逐渐增加,最后变成不透明的。当然说起来感觉其实没什么,不就是滑动改变透明度吗,但是做起来完全不是你想象的那样。

首先解决透明度的问题,让导航栏透明起来,如何做呢,我刚开始的做法是根据之前的经验,直接在导航栏上贴一张透明的图片,但是由于项目原本就设置有蓝色的导航背景了,所以怎么改也改不过来,有种欲哭无泪的感觉,于是各种找原因,甚至把基类里面的东西都改了,结果不尽人意,于是在群里找大神问,终于有大神回话,给出了这篇文章,简直救命稻草,感觉作者的境况跟我类似,于是乎就认真看完,恍然大悟,原来导航条上竟然还有其他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.y> -128?NO:YES;

}

//下拉伸伸图片

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

if(yOffset < -IMAGEHEIGHT) {

CGRectframe =_zoomImageView.frame;

frame.origin.y= yOffset;

frame.size.height= -yOffset;

_zoomImageView.frame= frame;

}

//下拉刷新

if(yOffset < -IMAGEHEIGHT-60) {

[selfrefreshNuNuZoneInfo];

}

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

floatal =(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:@"关注"];

[superviewDidDisappear:animated];

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

_topView.hidden=YES;

}

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

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

-(void)viewWillAppear:(BOOL)animated{

CGFloatyOffset =zoneTableView.contentOffset.y+64;

floatal = (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

{

[superviewDidAppear:animated];

if(!_isShowCollect) {

CGFloatyOffset =zoneTableView.contentOffset.y;

floatal = (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/

推荐阅读更多精彩内容