欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

去除导航栏的背景色和底部1像素黑色线条or隐藏导航栏

发布时间:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 去除导航栏的背景色和底部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隐藏导航栏的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。