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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • navigation技巧 [A].获取 导航栏所有的视图控制器 获取 导航栏所有的视图控制器,选择想要跳转的那个视...
    goyohol阅读 554评论 1 0
  • 最近项目中遇到了要自定义导航栏的需求,也不是那么复杂,但之前做这块的时候总是一直一知半解,以至于这次实现自定义导航...
    Damon22阅读 2,269评论 0 3
  • IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏、控制状态栏的文字颜色等,导航栏也有同样需求。本文总...
    YHWXQ简简单单的生活阅读 1,769评论 1 8
  • 总有人抱怨,白天要工作要学习没时间运动 那么,今天起就好好把握睡前的空闲时间,做一做瘦腿的简易运动吧 空中脚踏车运...
    七月王木木阅读 204评论 0 0
  • 姓名:王丽 组别:第377期六项精进努力二组组员 【日精进打卡第30天】 【知-学习】 背诵《大学》开篇0遍共34...
    天黑黑_e3af阅读 139评论 0 0