NavigationBar 简谱数字下面的横线线是怎么来的?如何去除

iOS如何去掉导航栏(UINavigationBar)下方的横线
作者:BrandonYum
字体:[ ] 类型:转载 时间:
本篇文章主要介绍了iOS如何去掉导航栏(UINavigationBar)下方的横线,非常具有实用价值,需要的朋友可以参考下
网上有很多关于隐藏的方法,设置后能够成功,但是跳转到其他界面的时候发现,其他界面横线也被隐藏了。
目前主流的方法是将shadowImage用一张空的图片图片替换掉
可是这种方法不能解决navigationController里面的某个界面隐藏,其他不变的问题。
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
通过xcode查看UINavigationBar的树形结构发现,可以很清楚的看出横线就是下面的_UIBarBackground下面的UIImageView对象
树形结构如下
**UINavigationBar**
**--[ 1] _UIBarBackground**
**----[ 2] UIImageView**
**----[ 2] UIVisualEffectView**
**------[ 3] _UIVisualEffectBackdropView**
**------[ 3] _UIVisualEffectFilterView**
**--[ 1] UINavigationButton**
**----[ 2] UIButtonLabel**
**--[ 1] _UINavigationBarBackIndicatorView**
所以能不能遍历UINavigationBar的所有子view然后找到横线对应的UIImageView对象,隐藏掉呢?
遍历UINavigationBar所有的子view获取子view的数组。
NSArray *allSubviews(UIView *aView) {
NSArray *results = [aView subviews];
for (UIView *eachView in aView.subviews)
NSArray *subviews = allSubviews(eachView);
if (subviews)
results = [results arrayByAddingObjectsFromArray:subviews];
遍历数组找到横线对应的UIImageView对象
@property (nonatomic, strong) UIImageView *shadowI
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSArray *subViews = allSubviews(self.navigationController.navigationBar);
for (UIView *view in subViews) {
if ([view isKindOfClass:[UIImageView class]] && view.bounds.size.height&1){
//实践后发现系统的横线高度为0.333
self.shadowImage = (UIImageView *)
self.shadowImage.hidden = YES;
最后在viewDidDisappear方法里面还原显示状态。
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self.shadowImage.hidden = NO;
运行后发现完美解决
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具如何去除tabBar的上横线和navigationBar的下横线 - 简书
如何去除tabBar的上横线和navigationBar的下横线
首先,我们可以打印一下tabBar上的控件们。
我们可以看到里面有一个UIImageView 高度为0.5. 也就是那个虚线。所以说,我们想更改tabBar的线,就对这个UIImageView操作。 代码来了。for (UIView lineView in self.tabBarController.tabBar.subviews){
if ([lineView isKindOfClass:[UIImageView class]] && lineView.bounds.size.height &= 1)
UIImageView lineImage = (UIImageView *)lineV
//更改线的颜色
//lineImage.backgroundColor = [UIColor redColor];
lineImage.hidden = YES;
接下来,我们继续说一下去除navigationBar的下横线: 那NavgationBar里面是不是也会有UIImageView呢 首先我们也打印一下 navigationBar 我们会发现,里面并没有所谓的UIImageView:
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
}2.利用递归拿到子控件中的那个横线子控件, 利用ViewController的生命周期,在ViewDidLoad中拿到横线line, 在ViewWillAppear中隐藏。 优点:navigationBar的半透明效果存在 缺点:代码稍微复杂一点点。
@interface ZDProfileController (){
UIImageView *}
(void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = ZDColor_W
line = [self navigationBarLine:self.navigationController.navigationBar];}
(UIImageView )navigationBarLine:(UIView )view{
// 符合条件返回控件
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height &= 1.0) {
return (UIImageView *)
// 递归查找
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self navigationBarLine:subview];
if (imageView) {
return imageV
(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
line.hidden = YES;}
Success in life is like climbing a height. 成功的人生如同登高。
It has to be done step by step. 一步一步地拾级而上。
In the course of this there are certain crucial turning points. 这中间会有一个个关键的转折点。
Every time we encounter a wall while walking along a stretch of road. 每当我们走了一段路碰壁了。
we turn into a brand-new stretch of road. 这一个个转折点又把我们带上了一段段崭新的道路.
Sometimes. a turning point can appear out of nowhere. 有时候转折点就存在于不经意的瞬间.
but most of the time in our lives. 而更多的时候 turning points are only reached 需要我们付出巨大的努力 as the result of a great deal of hard work. 人生轨迹才会出现转折。
As long as we believe that I will persist until I succeed!
只要我们相信,我坚持,我成功iOS去除导航栏和tabbar的1px横线
招聘信息:
1.在自己定义的导航栏中或者设计稿中经常需要去除导航栏的1px横线,主要是颜色太不协调了去除之前的图片要去除这1px的横线,首先应该知道它是什么,在Xcode的界面调试中可以看到,它其实是UIImageView来的找到横线是什么了···其实这是navigationBar的shadowImage,所以只要设置它为空即可,但是设置它为空之前应该先设置它的背景也为空,全部代码如下:[self.navigationController.navigationBar&setBackgroundImage:[UIImage&new]&forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar&setShadowImage:[UIImage&new]];完成效果如下(是不是一干二净?):完成之后的效果既然导航栏的那一横线能去除,那tabbar那一横线也是能去除的了(其实也是shadowImage来的)···方法一:自定义UITabBarController方法二:[self.tabBarController.tabBar&setBackgroundImage:[UIImage&new]];
[self.tabBarController.tabBar&setShadowImage:[UIImage&new]];反之,如果我们想自定义那一横线的颜色也是可以的,只要设置它的shadowImage即可。(如果有更加好的方法,希望交流一下~~)文章转自
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量7384点击量6365点击量5475点击量5046点击量4459点击量4387点击量4304点击量4181点击量4133
&2016 Chukong Technologies,Inc.
京公网安备89去除tabBar的上横线和navigationBar的下横线方法介绍
如何去除tabBar的上横线和navigationBar的下横线
标签:iOS导航条横线navigation隐藏
今天做项目,按照需求,需要作成这个样子。
不显示出navigationBar的那个线。
在介绍navigationBar的那个线之前,我想先说一下tabBar上方的拿刀线。vcD4NCjxwPsrXz8ijrM7Sw8e/ydLUtPLTodK7z8J0YWJCYXLJz7XEv9i8/sPHoaM8YnIgLz4NCrXDtb3S1M/Cv9i8/qO6PGJyIC8+DQo8aW1nIGFsdD0="tabBar上的控件" src="/Collfiles/19.png" title="\" />
我们可以看到里面有一个UIImageView 高度为0.5.
也就是那个虚线。
所以说,我们想更改tabBar的线,就对这个UIImageView操作。
代码来了。
for (UIView *lineView in self.tabBarController.tabBar.subviews)
if ([lineView isKindOfClass:[UIImageView class]] && lineView.bounds.size.height &= 1)
UIImageView *lineImage = (UIImageView *)lineV
lineImage.hidden = YES;
接下来,我们继续说一下去除navigationBar的下横线:
那NavgationBar里面是不是也会有UIImageView呢
首先我们也打印一下 navigationBar
我们会发现,里面并没有所谓的UIImageView:
但是如果你用xcode的那个层次结构图,你可以看到
箭头指向的就是那个UIImageView
所以,我们只需要修改UIImageView的属性,也就可以做到我们想要的了。
修改NavigationBar的横线有两种办法。
1.直接修改UIImageView:
优点:简单粗暴,省代码;
缺点:navigationBar的半透明效果没了。
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
2.利用递归拿到子控件中的那个横线子控件,
利用ViewController的生命周期,在ViewDidLoad中拿到横线line,
在ViewWillAppear中隐藏。
优点:navigationBar的半透明效果存在
缺点:代码稍微复杂一点点。
@interface ZDProfileController ()
UIImageView *
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = ZDColor_W
line = nil;
line = [self navigationBarLine:self.navigationController.navigationBar];
- (UIImageView *)navigationBarLine:(UIView *)view{
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height &= 1.0) {
return (UIImageView *)
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self navigationBarLine:subview];
if (imageView) {
return imageV
return nil;
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
line.hidden = YES;
以上就是,去除tabBar的上横线和navigationBar的下横线的方法。
如果确实帮助到您,请给顶一下。
有不懂的欢迎留言。去掉导航栏self.navigationController.navigationBar下默认黑线。
方法一:(会影响导航栏的translucent透明属性)
//视图将要显示时隐藏
-(void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
//视图将要消失时取消隐藏
-(void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:nil];
@property (nonatomic, weak) UIImageView *lineV
//视图加载完成获取到导航栏最下面的黑线
- (void)viewDidLoad {
[super viewDidLoad];
//获取导航栏下面黑线
_lineView = [self getLineViewInNavigationBar:self.navigationController.navigationBar];
//视图将要显示时隐藏
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
_lineView.hidden = YES;
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];
//视图将要消失时取消隐藏
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
_lineView.hidden = NO;
self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
//找到导航栏最下面黑线视图
- (UIImageView *)getLineViewInNavigationBar:(UIView *)view
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height &= 1.0) {
return (UIImageView *)
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self getLineViewInNavigationBar:subview];
if (imageView) {
return imageV
本文已收录于以下专栏:
相关文章推荐
一句话隐藏导航栏下的黑线
下图是要最终实现的效果:
但是,开始时会出现下图中箭头指向的横线效果:
这是导航栏的问题,将下边的代码放在  viewWillAppear  方法中就可以实现效果:
去掉导航栏的边界黑线
in viewDidload:
[self.navigationController.navigationBar setBackgroundImage:[[UIIma...
navigationController和tabBarController里的边框黑线其实是他们SubViews的一个ImageView。1、去掉NavigationController里面的黑线if...
原文链接:/9808.html
默认情况下会有这条线
第一种方法:
UINavigatio...
隐藏导航条底部的黑线(shadowImage)的四种办法
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新。
UITableView的Group样式下顶部空白处理
//分组列表头部空白处理
UIView *view = [[...
设置完导航栏的背景颜色和View的背景颜色后,发现在UINavigationBar底部有一条黑线。
苹果官方给出的解释:
如果你不调用方法设置一张背景图片的话,那就给你默认一张,然后同...
iOS UICollectionView实现图片轮播。
iOS 自定义弹窗UIAlertView,继承UIWindow。
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 吉他谱下面的横线 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信