去除导航栏的背景色和底部1像素黑色线条or隐藏导航栏
一般项目我们都用创建一个公用的导航控制器,然后定义我们所需要的一些按钮啊 样式啊 等
- (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隐藏导航栏相关推荐
- Unity3D之Windows端隐藏任务栏图标并添加至托盘
目录 1 基本效果 2 代码实现 2.1 思路 2.2 实现 2.2.1 Unity程序监听最小化和关闭事件 2.2.2 方便打包的菜单栏 2.2.3 IL2CPP启动外部程序 2.2.4 winfo ...
- 修改导航栏的背景色和字体颜色
项目基本接近尾声,闲来无事,把项目中用的的一些平时不常用的小技巧总结一下.以前每次使用都是现用现查,想着反正也都能查出来,就没有做记录.因为很多也都记不住,用完时间长不用的话就又忘了.现在有时间,自己 ...
- 解决导航栏按钮背景色切换,刷新页面,按钮背景色切换,页面和路径没有切换问题
解决导航栏按钮背景色切换,刷新页面,按钮背景色切换,页面和路径没有切换问题 上篇博文中 点击导航栏切换背景色 有一个bug,如果点击第二个或者后面几个按钮,再刷新页面,按钮背景色会跳到第一个按钮上去, ...
- 将导航栏固定到html底部(bootstrap)
学习目标: 将导航栏固定到html底部 学习产出: 代码 <!-- 导航条start --><!-- navbar-fixed-bottom固定在底部 --><nav c ...
- Android 9.0 显示系统导航栏(左/右/底部)
Android 9.0 显示系统导航栏(左/右/底部) 显示系统导航栏 一般有:HOME BACK 最近应用列表 等组成. 先看下效果图: 显示在底部(最常见的做法): 显示在右边(平板): (请 ...
- 【仿去哪儿】滑动隐藏导航栏
仿照去哪儿,隐藏导航栏(其实是设置为透明背景):向下滑动到时,当顶部图片看不见时,显示导航栏,源代码下载,效果如下: 主要思想:就是监听UITableView的滑动事件,当UITableView滑动一 ...
- android8.1隐藏导航栏,【EMUI8.0】利用ADB命令隐藏导航栏
本帖最后由 漫观流水无情 于 2018-7-11 20:33 编辑 近期,看到好多花粉在问更新了8.0之后怎么隐藏导航栏,目前系统内部只有自带的隐藏,很容易误触屏幕底部导致导航栏出现,并不能完全隐藏. ...
- dismiss ios pop效果_iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题
情景: 一级页面不显示导航栏 ,二级页面显示导航栏. 方法一 适用于push/pop: 一级页面中 - (void)viewWillAppear:(BOOL)animated { [super vie ...
- iOS 隐藏导航栏整个视图上移闪屏问题
2019独角兽企业重金招聘Python工程师标准>>> 在iOS开发中,特别是一些首页展示上要去掉导航栏(UINavigationBar). 最简单的办法在- (void)viewW ...
最新文章
- 半年 5 战 5 金:Kaggle 史上最快 GrandMaster 是如何炼成的?
- SQL Server安全-加密术和SQL注入攻击
- Linux手动添加用户、相关文件说明
- Spring对于Bean管理的核心组件
- golang延时_golang 实现延迟消息原理与方法
- linux下使用yum安装Apache+php+Mysql+phpMyAdmin
- ExtJS+DWR+Spring+Hibernate开发HRMS(3)
- mysql 出现 “1067 - Invalid default value for ‘UPDATE_TIME‘ “ 错误提示的解决办法
- EVEREST的使用教程
- 重磅丨教育部《高校人工智能创新行动计划》权威解读, AI人才缺口竟有500万!
- python-提取特征 特征选择
- dfuse 新版 client-js 库发布
- 金丹期前期:1.11、python语言进阶-网络
- Codeforces - Reachable Strings
- 递归和循环两种方法完成树的镜像转换
- excel显著性检验_#如何用excel做anova分析#用excel做显著性分析
- [转载]WIFI Direct/WIFI P2P
- python笛卡尔坐标系_python – n球面坐标系到笛卡尔坐标系
- 笔记:Solow 模型整理
- 落尘曦的书籍分享-数据库相关书籍