美文网首页
导航栏(Nav) 全透明效果的一种另类实现

导航栏(Nav) 全透明效果的一种另类实现

作者: kangyiii | 来源:发表于2018-05-28 18:02 被阅读0次
    首先,我们看看不经过任何处理的Nav层级结构:
    Nav层级结构

    其中需要注意是:UIImageView是导航栏下面的那条线。有时候我们会发现Nav有一层蒙版,其实都是UIVisualEffectView在作怪。

    主流实现方案

    给nav设置一张空图片便可达到导航栏全透明效果。

    //设置导航栏背景图片为一个空的image,这样就透明了 
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
    //去掉透明后导航栏下边的黑边 
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
    

    层级结构:


    层级结构

    我们可以看出,在设置了空图片之后,UIVisualEffectView没有加入进来,取而代之的是我们设置的空图片

    另类实现方案

    直接将UIVisualEffectView隐藏,让蒙版消失。

    [self.navigationController.navigationBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if([obj isMemberOfClass:NSClassFromString(@"_UIBarBackground")]){
                [obj.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    if([obj isMemberOfClass:NSClassFromString(@"UIVisualEffectView")]||[obj isMemberOfClass:NSClassFromString(@"UIImageView")]){
                        obj.hidden = YES;
                    }
                }];
            }
        }];
    

    层级结构:


    层级结构

    值得注意的是:如果直接将UIVisualEffectView隐藏虽能达到全透明效果,但随之而来的负面影响是 在设置barTintColor会失效,因为barTintColor添加的图层也是在UIVisualEffectView上。

    相关文章

      网友评论

          本文标题:导航栏(Nav) 全透明效果的一种另类实现

          本文链接:https://www.haomeiwen.com/subject/icygjftx.html