去除导航栏下方的黑线 OC

方案一

//缺点:把当前navigationController所有的黑线都去掉了 
self.navigationController.navigationBar.subviews.firstObject.subviews.firstObject.hidden=YES;

方案二

-(void)viewDidAppear:(BOOL)animated
{
//    只隐藏当前页面的黑线
    UIImageView*imageView=self.navigationController.navigationBar.subviews.firstObject.subviews.firstObject;
//    imageView.center=CGPointMake(0, -1);
//    imageView.image=[UIImage new];
    imageView.backgroundColor=[UIColor clearColor];
    [super viewDidAppear:animated];
}

方案三

//偶然发现 在viewDidDisappear中使用 NSLog(@"%@",self.navigationController.navigationBar);
会发现打印为null,这时 你需要在viewWillAppear获取这个navigationController;即定义一个全局变量navigationController。
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.subviews.firstObject.subviews.firstObject.hidden = YES;
    navigationController=(LX_NavigationController*)self.navigationController;
}

- (void)viewDidDisappear:(BOOL)animated
{
    if (navigationController) {
        navigationController.navigationBar.subviews.firstObject.subviews.firstObject.hidden = NO;
        NSLog(@"%@",navigationController.navigationBar.subviews.firstObject.subviews.firstObject);
    }
}

原理: 通过runtime 我们可以查询到这条黑线是一个变量名叫_shadowView的UIImageView 得到这个UIImageView 我们就能为所欲为啦~

你可能感兴趣的:(去除导航栏下方的黑线 OC)