去除导航栏的背景色和底部1像素黑色线条or隐藏导航栏
?一般項目我們都用創建一個公用的導航控制器,然后定義我們所需要的一些按鈕啊 樣式啊 等
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {if (self.childViewControllers.count) {//這里可以自定義返回按鈕 }[super pushViewController:viewController animated:animated]; }但是呢 ,我們有些控制器的的導航欄樣式需要有所不一樣,比如標題所提到的我們需要導航欄背景透明和去掉底部黑線
解決方式為:在當前控制器
- (void)viewWillAppear:(BOOL)animated添加兩行代碼
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage:[UIImage new]];運行之后發現導航欄的背景和黑線確實沒有了 (內容比較簡單,就不上圖了), 正在你準備歡呼的時候,確發現一點擊返回或者push到下一個控制器的時候,連其他控制器的導航欄都透明了,所以,我們需要做的事情是,在要退出當前控制器的時候,需要重新設會默認的樣式
原先還在納悶,我到底該怎么設回原來的值呢? 最后嘗試了一下把image都設置為nil ?就可以了 估計是系統內部自己會做判斷,有傳就顯示 ?沒傳就用默認值
解決方式為:在當前控制器
- (void)viewWillDisappear:(BOOL)animated添加以下代碼
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage:nil];,
以上講到到的方法會去掉背景色和黑線 ,如果只是單純的要去掉黑線有種比較暴力的方法就是遍歷導航欄,因為那條黑線其實是UIImageView,所以我們可以這么做:
- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]){NSArray *list=self.navigationController.navigationBar.subviews;for (id obj in list){if ([UIDevice currentDevice].systemVersion.floatValue >= 10.0){//10.0的系統字段不一樣UIView *view = (UIView*)obj;for (id obj2 in view.subviews) {if ([obj2 isKindOfClass:[UIImageView class]]){UIImageView *image = (UIImageView*)obj2;if (image.height <= 1) {image.hidden = YES;}}}}}} }遍歷會發現UIImageView有兩個,所以我這里做判斷,只要隱藏黑線.
如果用的是公用的導航欄,當我們push到別的控制器或者進行pop的是時候,依然會影響到其他控制器的導航欄,如果不想影響到其他控制器,我們還是在
- (void)viewWillDisappear:(BOOL)animated 方法里面在一次遍歷,然后把hidden改為NO
?
這里做下另一個需求的補充,假設我們需要隱藏整個導航欄,根究不同情況我們可以這么做:
1, ?設置隱藏和顯示: 在需要隱藏導航欄的控制器里面添加如下代碼, (該方法會導致返回手勢不可用)
- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];[self.navigationController setNavigationBarHidden:YES animated:YES]; }- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];[self.navigationController setNavigationBarHidden:NO animated:YES];}2, 設置透明度: 在該控制器做如下設置, 這個方法會導致手勢要返回上個控制器的時候會突然顯示出導航欄, ?也許我們需要實時監聽手的觸摸點與屏寬的比例來漸進的設置?navigationBar.alpha ?數值
- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];self.navigationController.navigationBar.alpha = 0; }- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];self.navigationController.navigationBar.alpha = 1.0;}?
end!
?
轉載于:https://www.cnblogs.com/yulongjiayuan/p/6694571.html
總結
以上是生活随笔為你收集整理的去除导航栏的背景色和底部1像素黑色线条or隐藏导航栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyEclipse设置文件编码
- 下一篇: 表单验证以及下拉框应用