UINavigationController分割线的隐藏

在开发中,根据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;
}

你可能感兴趣的:(UINavigationController分割线的隐藏)