导航栏背景透明终极方案

原理:导航栏透明通常需要把背景颜色和分割线设置透明,大部分的方案是直接设置一个空对象,简单粗暴,缺点是无法复原,现在的解决方案是拿到导航栏背景和分割线的对象,在适当的时候进行隐藏,以下是代码

 UIView *backgroundView = [[self.navigationController.navigationBar subviews] firstObject];
        for (UIView *subView in backgroundView.subviews) {
            if (subView.height > 63) {//实际高度为64 背景视图
                _navBackImageView = subView;
            }
      
            if (subView.height < 1.0) {//实际高度为0.5  分割线
                _navLineView = subView;
            }
        }
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    _navBackImageView.hidden = YES;
    _navLineView.hidden = YES;
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    _navBackImageView.hidden = NO;
    _navLineView.hidden = NO;

}

没有根据first object 和last object获取对象是因为子视图的对象顺序会改变,这样,拿到对象以后就可以根据自己的需求进行隐藏和显示,目前测试不受系统版本的影响。

你可能感兴趣的:(导航栏背景透明终极方案)