Navigation全透明的實現
上程式碼,看實現:
/** navigation全透明實現方法 @param currentNav 當前全透明的NavigationController */ + (void)transparentFullyWith:(UINavigationController *)currentNav{ UIView *barBack = currentNav.navigationBar.subviews[0]; [barBack setAlpha:0]; UIView *line = [barBack valueForKeyPath:@"_shadowView"]; [line setHidden:YES]; if (@available(iOS+11/">iOS 11.0,*)) { [barBack.subviews setValue:@(0) forKeyPath:@"alpha"]; } //設定標題字型顏色為白色 [currentNav.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; }
需要注意的是,因為navigationController是共用的,在當前頁面消失的時候,需要重新將navigation的屬性進行復位處理,這樣才能在其他頁面保持正常,避免出現沒有底部線條的情況。
+ (void)transparentRecoverWith:(UINavigationController *)currentNav{ UIView *barBack = currentNav.navigationBar.subviews[0]; [barBack setAlpha:1.0]; UIView *line = [barBack valueForKeyPath:@"_shadowView"]; [line setHidden:NO]; if (@available(iOS 11.0,*)) { [barBack.subviews setValue:@(1) forKeyPath:@"alpha"]; } [currentNav.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]}]; }
授人以魚不如授人以漁!總結這個方法的核心在於對 keyPath的使用,可以用這樣的方法訪問並且操作很多蘋果沒有暴露出來的物件和屬性。
例如,barBack是這樣的樣子:

barBack的子檢視.png