iOS 关于导航栏,标签栏下划线显示问题

1.现实需求经常会出现一种导航栏和图片无缝衔接的需求

例如:

iOS 关于导航栏,标签栏下划线显示问题_第1张图片


然而往往当你做出来的APP是这个样子的 :
                                 

iOS 关于导航栏,标签栏下划线显示问题_第2张图片
  1 - 1

看清楚红色方框的一根背景线:

iOS 关于导航栏,标签栏下划线显示问题_第3张图片
  1 - 2

那么我们进行一个界面解剖:

iOS 关于导航栏,标签栏下划线显示问题_第4张图片
   1 - 3
iOS 关于导航栏,标签栏下划线显示问题_第5张图片
 1 - 4

在UINavigationBar上面有一个背景线,这个背景线居然是一个 UIImageView  高度为0.5 宽度全屏:

iOS 关于导航栏,标签栏下划线显示问题_第6张图片
1 - 5



2.现在我们已经知道了这个背景线是个什么,那么我们如何去设置显示或者隐藏呢:

1.我们确认这是一个UIImageView;
2.他在UINavigationBar上,是他的子视图;
3.他的高度为0.5;
4.我们可以通过图 1 - 5 看到它是存在于UINavigationBar上的UIBarBackground的子视图

所以我们是否有一个思路,通过UINavigationBar的子视图来获取这个视图,判断条件为 [view isKindOfClass:UIImageView.class]
&& view.bounds.size.height = 0.5

实现代码:

@property (nonatomic,strong)UIImageView *navBarHairlineImageView;

- (void)viewDidLoad {

      [super viewDidLoad];

     _navBarHairlineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar];

}


- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {

      //判断视图是否是ineImageView

      if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height = 0.5) {

            return (UIImageView *)view;
      }

    //递归返回视图的imageView子视图

      for (UIView *subview in view.subviews) {

            UIImageView *imageView = [self findHairlineImageViewUnder:subview];

            if (imageView) {

                  return imageView;

           }

      }

     return nil;

}

- (void)viewWillDisappear:(BOOL)animated {

      [super viewWillDisappear:animated];

      //显示线条

      _navBarHairlineImageView.hidden = NO;

}

- (void)viewWillAppear:(BOOL)animated {

      [super viewWillAppear:animated];

     //隐藏线条

     _navBarHairlineImageView.hidden = YES;

}


最后实现代码:

iOS 关于导航栏,标签栏下划线显示问题_第7张图片
  2 - 1


最后效果图 :

iOS 关于导航栏,标签栏下划线显示问题_第8张图片
2 - 2


3.如果在UITabBar上出现了分割线同理可以解决:

iOS 关于导航栏,标签栏下划线显示问题_第9张图片
3 - 1

这样我就不在给出解决方法了,因为方法同上!

你可能感兴趣的:(iOS 关于导航栏,标签栏下划线显示问题)