【導(dǎo)航條滾動透明】一個(gè)分類搞定

下面這個(gè)界面有沒有覺得很眼熟熊昌。打開你手里的App仔細(xì)觀察女淑,你會發(fā)現(xiàn)很多都有實(shí)現(xiàn)這個(gè)功能蒲稳。比如美團(tuán)外賣的首頁模塊氮趋,新浪微博的個(gè)人詳情頁面。要怎么樣才能快速的實(shí)現(xiàn)這個(gè)功能呢江耀!那下面由筆者來告訴你如何三行代碼剩胁,集成這個(gè)功能。祥国。昵观。
2.gif

原理介紹:

要想把一個(gè)view設(shè)計(jì)成透明的我們一下子就會想到兩種方案,設(shè)置view的alpha值為0舌稀,或者設(shè)置view的backgroundColor為clearColor.但是UINavigationBar是一個(gè)比較特殊的視圖啊犬,它是沒有alpha屬性的,那我們可以設(shè)置opaque(不透明度)為NO扩借,上代碼試一試

//方案一:不透明度為NO
navigationBar.opaque = NO椒惨;
//方案二:背景顏色為clearColor 
navigationBar.backgroudcolor = [UIColor clearColor];

結(jié)果潮罪,然并卵康谆,完全沒用。這時(shí)候該怎么辦呢嫉到?這時(shí)候我們就得來看看UINavigationBar這個(gè)視圖的結(jié)構(gòu)了沃暗,如下圖。

NavgationBar.png

現(xiàn)在筆者教大家一個(gè)小技巧何恶。請看下面代碼:

//設(shè)置一張空的圖片
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
//清除邊框孽锥,設(shè)置一張空的圖片
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init]];

這時(shí)候再打開項(xiàng)目層次圖,你會有驚人的發(fā)現(xiàn)

Snip20160314_4.png

對比一下,你會發(fā)現(xiàn)只剩兩層了惜辑。不要問為什么唬涧,這都是系統(tǒng)幫你做的。盛撑。碎节。當(dāng)你設(shè)置了背景圖片的時(shí)候,就會出現(xiàn)這樣的結(jié)果抵卫。

知道了上述的原理狮荔,這就好辦了,現(xiàn)在只要監(jiān)聽介粘,控制器內(nèi)部的scrollView 的滾動殖氏,就可以實(shí)現(xiàn)導(dǎo)航條漸漸透明的效果了。

  • 業(yè)務(wù)邏輯姻采,功能實(shí)現(xiàn)其實(shí)都不是很難雅采。但是也需要花費(fèi)一些時(shí)間,筆者在這給大家分享一下自己寫的一個(gè)分類偎谁。導(dǎo)入這個(gè)分類总滩,你只需要調(diào)用兩三個(gè)接口就可以實(shí)現(xiàn)這個(gè)功能了。
    首先看一下分類提供的接口
Snip20160326_2.png

分類介紹

  • 我寫的這個(gè)分類不僅可以在系統(tǒng)的UITableViewController 和UICollectionViewController中使用巡雨,(系統(tǒng)的只需調(diào)用分類中兩個(gè)方法即可)闰渔。而且當(dāng)你的UIViewController中有1個(gè)或多個(gè)可以垂直滾動的scrollView都可以使用。(需要告訴控制器需要監(jiān)聽哪個(gè)scrollView的滾動铐望,即設(shè)置keyScrollView).
  • 重要的是冈涧,這個(gè)分類的代碼侵入性非常低,使用簡單方便正蛙。當(dāng)不需要這些功能的時(shí)候督弓,你只需要注釋掉幾行代碼即可。對原控制器沒有任何影響乒验,無需更改控制器內(nèi)的其他代碼結(jié)構(gòu)愚隧。

分類代碼

分類接口
#import <UIKit/UIKit.h>
typedef struct {
    BOOL isLeftAlpha;
    BOOL isTitleAlpha;
    BOOL isRightAlpha;
    
}HYBarItemAlphaControl;
@interface UIViewController (NavBarHidden)
/** 當(dāng)你的控制器里有多個(gè)scrollView的時(shí)候,設(shè)置需要監(jiān)聽的keyScrollView */
@property (nonatomic,weak) UIScrollView * keyScrollView;
/** 設(shè)置導(dǎo)航條上的標(biāo)簽是否需要跟著隱藏  */
- (void)setBarItemAlphaControl:(HYBarItemAlphaControl)isBarItemAlphaControl;
/**  
 *      在控制器ViewWillAppear.ViewWillDisappear需要調(diào)用的接口
 *      避免push到下一個(gè)控制器,消除對其他控制器導(dǎo)航條的影響
 */
- (void)setInViewWillAppear;
- (void)setInViewWillDisappear;
/** rate將決定顏色變化程度,值越大,顏色變化越明顯,rate的取值范圍是0.01 - 0.999999 */
- (void)scrollControlRate:(CGFloat)height colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue ;   
@end

下面這個(gè)效果圖是系統(tǒng)的UITableViewController锻全,以下是效果圖和代碼

2.gif

控制器代碼:

#import "TestViewController.h"
#import "UIViewController+NavBarHidden.h"

@implementation TestViewController
- (void)viewDidLoad{
    [super viewDidLoad];
    //設(shè)置當(dāng)有導(dǎo)航欄自動添加64的高度的屬性為NO
    self.automaticallyAdjustsScrollViewInsets = NO;
    //設(shè)置tableView的頭部視圖
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 0, 250)];
    imageView.image = [UIImage imageNamed:@"1.jpg"];
    self.tableView.tableHeaderView = imageView;    
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
      [self scrollControlRate:0.5 colorWithRed:0.0 green:1.0 blue:0.0 ];
}
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self setInViewWillAppear];
}
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self setInViewWillDisappear];
}
@end

下面這個(gè)效果圖是一個(gè)ViewController中含有自己創(chuàng)建的一個(gè)CollectionView.

1.gif

控制器代碼

@implementation TestCollectionController
-(void)viewDidLoad{ 
    [super viewDidLoad];
    //1.設(shè)置當(dāng)有導(dǎo)航欄自動添加64的高度的屬性為NO
    self.automaticallyAdjustsScrollViewInsets = NO;
    //2.設(shè)置導(dǎo)航條內(nèi)容
    [self setUpNavBar];
    //3.導(dǎo)航條上的自定義的子標(biāo)簽是否需要跟著隱藏,只對自定義的view有效果.對系統(tǒng)默認(rèn)的無效
    [self  setBarItemAlphaControl:(HYBarItemAlphaControl){0,1,1}];
    //4.設(shè)置collectionView
    [self setUpCollectionView];
    //5.告訴程序是根據(jù)哪個(gè)scrollView的滾動來控制狀態(tài)欄的變化
    self.keyScrollView = self.collectionView;  
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}

#warning 監(jiān)聽滾動,調(diào)用框架接口
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    //rate將決定顏色變化程度,值越大,顏色變化越明顯,rate的取值范圍是0.01 - 0.999999
    [self scrollControlRate:0.5 colorWithRed:1.0 green:0.0 blue:0.0 ];   
}
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self setInViewWillAppear];
}
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self setInViewWillDisappear];
}

項(xiàng)目源碼分享狂塘,希望大家喜歡,下載的時(shí)候順便star一下鳄厌,好人多福荞胡。https://github.com/newyeliang/HYNavBarHidden.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市了嚎,隨后出現(xiàn)的幾起案子泪漂,更是在濱河造成了極大的恐慌廊营,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝勤,死亡現(xiàn)場離奇詭異露筒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)敌卓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門邀窃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人假哎,你說我怎么就攤上這事“袄” “怎么了舵抹?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劣砍。 經(jīng)常有香客問我惧蛹,道長,這世上最難降的妖魔是什么刑枝? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任香嗓,我火速辦了婚禮,結(jié)果婚禮上装畅,老公的妹妹穿的比我還像新娘靠娱。我一直安慰自己,他們只是感情好掠兄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布像云。 她就那樣靜靜地躺著,像睡著了一般蚂夕。 火紅的嫁衣襯著肌膚如雪迅诬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天婿牍,我揣著相機(jī)與錄音侈贷,去河邊找鬼。 笑死等脂,一個(gè)胖子當(dāng)著我的面吹牛俏蛮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慎菲,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嫁蛇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了露该?” 一聲冷哼從身側(cè)響起睬棚,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抑党,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體包警,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年底靠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了害晦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暑中,死狀恐怖壹瘟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳄逾,我是刑警寧澤稻轨,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站雕凹,受9級特大地震影響殴俱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枚抵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一线欲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汽摹,春花似錦李丰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至圾旨,卻和暖如春踱讨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砍的。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工痹筛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廓鞠。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓帚稠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親床佳。 傳聞我的和親對象是個(gè)殘疾皇子滋早,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容