一般项目我们都用创建一个公用的导航控制器,然后定义我们所需要的一些按钮啊 样式啊 等

- (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隐藏导航栏相关推荐

  1. Unity3D之Windows端隐藏任务栏图标并添加至托盘

    目录 1 基本效果 2 代码实现 2.1 思路 2.2 实现 2.2.1 Unity程序监听最小化和关闭事件 2.2.2 方便打包的菜单栏 2.2.3 IL2CPP启动外部程序 2.2.4 winfo ...

  2. 修改导航栏的背景色和字体颜色

    项目基本接近尾声,闲来无事,把项目中用的的一些平时不常用的小技巧总结一下.以前每次使用都是现用现查,想着反正也都能查出来,就没有做记录.因为很多也都记不住,用完时间长不用的话就又忘了.现在有时间,自己 ...

  3. 解决导航栏按钮背景色切换,刷新页面,按钮背景色切换,页面和路径没有切换问题

    解决导航栏按钮背景色切换,刷新页面,按钮背景色切换,页面和路径没有切换问题 上篇博文中 点击导航栏切换背景色 有一个bug,如果点击第二个或者后面几个按钮,再刷新页面,按钮背景色会跳到第一个按钮上去, ...

  4. 将导航栏固定到html底部(bootstrap)

    学习目标: 将导航栏固定到html底部 学习产出: 代码 <!-- 导航条start --><!-- navbar-fixed-bottom固定在底部 --><nav c ...

  5. Android 9.0 显示系统导航栏(左/右/底部)

    Android 9.0 显示系统导航栏(左/右/底部) 显示系统导航栏 一般有:HOME  BACK  最近应用列表 等组成. 先看下效果图: 显示在底部(最常见的做法): 显示在右边(平板): (请 ...

  6. 【仿去哪儿】滑动隐藏导航栏

    仿照去哪儿,隐藏导航栏(其实是设置为透明背景):向下滑动到时,当顶部图片看不见时,显示导航栏,源代码下载,效果如下: 主要思想:就是监听UITableView的滑动事件,当UITableView滑动一 ...

  7. android8.1隐藏导航栏,【EMUI8.0】利用ADB命令隐藏导航栏

    本帖最后由 漫观流水无情 于 2018-7-11 20:33 编辑 近期,看到好多花粉在问更新了8.0之后怎么隐藏导航栏,目前系统内部只有自带的隐藏,很容易误触屏幕底部导致导航栏出现,并不能完全隐藏. ...

  8. dismiss ios pop效果_iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题

    情景: 一级页面不显示导航栏 ,二级页面显示导航栏. 方法一 适用于push/pop: 一级页面中 - (void)viewWillAppear:(BOOL)animated { [super vie ...

  9. iOS 隐藏导航栏整个视图上移闪屏问题

    2019独角兽企业重金招聘Python工程师标准>>> 在iOS开发中,特别是一些首页展示上要去掉导航栏(UINavigationBar). 最简单的办法在- (void)viewW ...

最新文章

  1. 半年 5 战 5 金:Kaggle 史上最快 GrandMaster 是如何炼成的?
  2. SQL Server安全-加密术和SQL注入攻击
  3. Linux手动添加用户、相关文件说明
  4. Spring对于Bean管理的核心组件
  5. golang延时_golang 实现延迟消息原理与方法
  6. linux下使用yum安装Apache+php+Mysql+phpMyAdmin
  7. ExtJS+DWR+Spring+Hibernate开发HRMS(3)
  8. mysql 出现 “1067 - Invalid default value for ‘UPDATE_TIME‘ “ 错误提示的解决办法
  9. EVEREST的使用教程
  10. 重磅丨教育部《高校人工智能创新行动计划》权威解读, AI人才缺口竟有500万!
  11. python-提取特征 特征选择
  12. dfuse 新版 client-js 库发布
  13. 金丹期前期:1.11、python语言进阶-网络
  14. Codeforces - Reachable Strings
  15. 递归和循环两种方法完成树的镜像转换
  16. excel显著性检验_#如何用excel做anova分析#用excel做显著性分析
  17. [转载]WIFI Direct/WIFI P2P
  18. python笛卡尔坐标系_python – n球面坐标系到笛卡尔坐标系
  19. 笔记:Solow 模型整理
  20. 落尘曦的书籍分享-数据库相关书籍

热门文章

  1. BugkuCTF-Misc:宽带信息泄露
  2. PyTorch基础(四)-----数据加载和预处理
  3. C++ 二维数组和指针数组
  4. STM32开发 -- 4G模块开发详解(2)
  5. 基于TCP协议的通信模型
  6. 汇编语言AND指令:对两个操作数进行逻辑(按位)与操作
  7. Guide To Using The Gnosis Multisig Wallet
  8. 闪电网络介绍以及试用 (下)
  9. 《Android插件化技术——原理篇》
  10. ARM64的启动过程之(一):内核第一个脚印