前言
在開發(fā)中常常會遇到將導(dǎo)航條設(shè)置為透明的效果,所有收集了幾種方案,供君使用
- 第一種: 直接調(diào)用它的隱藏屬性
// 視圖即將實現(xiàn)
- (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];
}
注意點: 使用這個方法是可以將導(dǎo)航條設(shè)置為透明, 但是有一個缺點,就是當(dāng)push大盤另一個控制器時, 該控制器的的導(dǎo)航條會有一個動畫的顯示, 客戶體驗不是很好
- 第二種: 在代理方法中設(shè)置它的隱藏屬性
#import "ViewController.h"
#import "WGViewController.h"
// 遵守代理
@interface ViewController ()<UINavigationControllerDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 設(shè)置代理
self.navigationController.delegate = self;
}
// 跳轉(zhuǎn)界面
- (IBAction)jump {
WGViewController *Vc = [[WGViewController alloc] init];
Vc.view.backgroundColor = [UIColor yellowColor];
[self.navigationController pushViewController:Vc animated:YES];
}
#pragma mark - UINavigationControllerDelegate
// 即將顯示的導(dǎo)航控制器
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// 是否要隱藏導(dǎo)航條(判斷要顯示導(dǎo)航條的控制器是否是自己)
BOOL isShowViewController = [viewController isKindOfClass:[self class]];
[self.navigationController setNavigationBarHidden:isShowViewController animated:YES];
}
@end
- 第三種: 添加一張空的圖片到導(dǎo)航條上
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 設(shè)置導(dǎo)航欄為透明,其原理就是傳入一個沒有圖片,但又不為空的UIImage給導(dǎo)航欄
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
// 把導(dǎo)航欄上的分隔線用一個沒有圖片,但又不為空的UIImage給覆蓋掉
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
如果需要跳轉(zhuǎn)到下一個控制器,但是下一個控制器又不需要隱藏,可以在- (void)viewWillDisappear:(BOOL)animated 方法中設(shè)置上面的代碼,只需要將[UIImage new]設(shè)置為nil即可
最優(yōu)方案:
- (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];
}