美文网首页Wi-Fi参考
navigationBar的translucent属性研究

navigationBar的translucent属性研究

作者: 双手插兜Jeff | 来源:发表于2017-01-04 16:21 被阅读302次

      Translucent字面意思:半透明。
      在文档里是这么描述的,所以默认是 YES.
      New behavior on iOS 7. Default is YES.


    我们先来简单试验一下。把navigationBar.barTintColor的颜色改成红色

    Snip20170104_22.png
    view 背景色和navigationBar.barTintColor是一致的。但我们看到的navigationBar颜色显然不太一样。打开debug view 就可以看到。
    Snip20170104_21.png
    在navigationBar的上面还覆盖着一个 visualeffectView。如何去掉visualeffectView呢?
    结论先行。只要设置了BackgroundImage,visualeffectView就肯定没有了。
    UIImage *imageNil = [UIImage new];
    [self.navigationBar setBackgroundImage:imageNil forBarMetrics:UIBarMetricsDefault];
    

    translucent下面的解释。我理解的是,如果你自己设置了背景图片,苹果认为你就是希望去显示原图的,就不会再帮你去做模糊渲染。
    If you send setTranslucent:YES to a bar with an opaque custom background image it will apply a system opacity less than 1.0 to the image.
    这个时候进来后发现navigationBar颜色没有了,变成了透明。经过我多次测试,发现你只要设置了BackgroundImage,barTintColor就失效了。原因是barTintColor是在visualeffectView上做渲染的。现在visualeffectView都没有了。怎么可能还有红色的 barTintcolor 呢!下面这张图是设置了image 之后的navigationBar的结构。

    no visualeffectView.png
    此处发现有两个 UIImageView,这里解释一下。一个是BackgroundImage,另一个是ShadowImage。这张图比较好解释!

    Snip20170104_27.png

    目的:navigationBar完全显示自己定义的原色。
    方法1:把BackgroundImage的颜色设置成你希望的颜色即可。
    方法2:自己搞一张纯色图片,设置barTintcolor时用平铺去实现。(此时千万不要再设置BackgroundImage!!!切记。)
    最后在啰嗦一句,如果BackgroundImage和barTintcolor都没有设置,就是我们见到的一般的有点透明的纯白色。
    Translucent = YES;基本就是这样。

    大家可以看一下https://github.com/ltebean/LTNavigationBar
    这个总共也就100来行代码。看代码可以比较好的理解概念。


    Translucent = NO;
    这个设置了之后,再设置barTintcolor,可以快速达到navigationBar完全显示自己定义的原色的目地。那为啥不用这个呢?如图。
    左self.navigationBar.translucent = NO;
    右self.navigationBar.translucent = YES;
    1.//设置这个会让整个view下移64.
    2.//让 self.navigationBar.barTintColor 颜色完全展示出来

    123.png

    Translucent这个属性大概就是这么个用法。我哪里没讲清楚地在下面留言哈!欢迎交流技术。

    相关文章

      网友评论

        本文标题:navigationBar的translucent属性研究

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