美文网首页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