Translucent字面意思:半透明。
在文档里是这么描述的,所以默认是 YES.
New behavior on iOS 7. Default is YES.
我们先来简单试验一下。把navigationBar.barTintColor
的颜色改成红色
![](https://img.haomeiwen.com/i1716995/beffd02fec368d80.png)
view 背景色和navigationBar.barTintColor是一致的。但我们看到的navigationBar颜色显然不太一样。打开debug view 就可以看到。
![](https://img.haomeiwen.com/i1716995/622b41c8e69b70fc.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的结构。
![](https://img.haomeiwen.com/i1716995/4f29bda0e3ae193d.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 颜色完全展示出来
![](https://img.haomeiwen.com/i1716995/dae6aabe28035dde.png)
Translucent这个属性大概就是这么个用法。我哪里没讲清楚地在下面留言哈!欢迎交流技术。
网友评论