在开发中,根据UI同学的设计稿有时是需要将self.view上的控件和导航条做到浑然一体的,做到这一点就要消除两者间的第三者“分割线”,导航条默认是携带这条“黑线”的。
三种方式:
- 一行代码就搞定的方式,但是我用在代码中是没有效果的。大家可以考虑尝试一下。
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
- 两行代码就搞定的方式,这个是真实有效的。亲身体验过!
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
- 这个方式的代码就有点多了哈,但是好处是灵活性比较好,更容易控制。
思路:1、定义一个UIImageView属性。2、找到导航条中“分割线”。3、将找到的分割线赋值给属性。4、通过属性的hidden属性控制“分割线”的隐藏和显示。
@property (nonatomic, strong) UIImageView *navigationImageView;
//在viewWillAppear中设置“分割线”为隐藏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIImageView *navigationImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar];
self.navigationImageView = navigationImageView;
self.navigationImageView.hidden = YES;
}
//在viewWillDisappear设置“分割线”显示
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationImageView.hidden = NO;
}
//获取分割线
-(UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
return (UIImageView *)view;
}
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self findHairlineImageViewUnder:subview];
if (imageView) {
return imageView;
}
}
return nil;
}