导航栏设计成透明状态,后引发的问题以及解决方案

请参考最近做的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;

这个方法: 从属性名就可以得知该属性的功能:拓展布局是否包含不透明的导航栏。

你可能感兴趣的:(导航栏设计成透明状态,后引发的问题以及解决方案)