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.> -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/

發佈了2 篇原創文章 · 獲贊 11 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章