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

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

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

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


在UINavigationBar上面有一个背景线,这个背景线居然是一个 UIImageView 高度为0.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;
}
最后实现代码:

最后效果图 :

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

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