功能需求:根新浪微博个人主页类似,下拉拉伸放大图片下拉刷新(前面文章已解决),向上滑动的时候,导航栏的透明度逐渐增加,最后变成不透明的。当然说起来感觉其实没什么,不就是滑动改变透明度吗,但是做起来完全不是你想象的那样。
首先解决透明度的问题,让导航栏透明起来,如何做呢,我刚开始的做法是根据之前的经验,直接在导航栏上贴一张透明的图片,但是由于项目原本就设置有蓝色的导航背景了,所以怎么改也改不过来,有种欲哭无泪的感觉,于是各种找原因,甚至把基类里面的东西都改了,结果不尽人意,于是在群里找大神问,终于有大神回话,给出了这篇文章,简直救命稻草,感觉作者的境况跟我类似,于是乎就认真看完,恍然大悟,原来导航条上竟然还有其他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/