UINavigationController分割线的隐藏

2016-09-14  本文已影响287人  皓皓大帝

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

猜你喜欢

热点阅读