请参考最近做的EMUI9.0:
导航栏设计思路:
采取透明背景的方式设计导航栏。
参考方法:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//设置导航栏背景图片为一个无图的image,导航栏会加载空imgae,就自然透明掉了
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
//同理透明掉导航栏下划线
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
// 修改状态栏颜色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//设置状态栏字体为白色
}
因为修改了系统的导航栏,因此在界面即将销毁的情况下
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//导航栏的背景图和下划线都置空,就会回到默认的设置了
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:nil];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//设置状态栏字体为默认的黑色
}
如果您在返回的时候,设置了背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageName:@"****.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage imageName:@"****.png"]];
您会发现一个神奇的效果。涉及下一个界面继承于UIScrollView的类如(UITableview 等)的界面会下移64.
这个时候您可能需要设置一个参数
self.extendedLayoutIncludesOpaqueBars = YES;
这个方法: 从属性名就可以得知该属性的功能:拓展布局是否包含不透明的导航栏。