UITabBar 里的各种属性在使用的使用总是傻傻分不清,比如,设置背景色,应该用 barTintColor ,而不是我们以为的 backgroundColor,想设置它要透明的时候,barTintColor = UIColor.clear 又不起效果。我在这里用图稍微解释下原因,希望对大家有所帮助。
先定一个目标,我想要自定义 UITabBar 最终达到的效果要是这样的。
![](https://img.haomeiwen.com/i49292/86db5ae58ae4d053.png)
一个 UITabBar 什么属性都没有自定义的时候,默认的层次情况应该如下图一样。
![](https://img.haomeiwen.com/i49292/2d22b8a0698a5266.png)
其中,visualView 是在 backgroundView 中的子视图,可以说 tabBar 的背景管理都是在 backgroundView 中进行的。
先来看看 isTranslucent 这个属性,这个默认是 true,设为 false 之后,tabBar 的层次就变成下面这样了
![](https://img.haomeiwen.com/i49292/11ce34a2d07a60ba.png)
可以看到 backgroundView 中的 visualView 不见了,backgroundView 的背景色变为 white 不透明的,后面 vc 的 view 也不在 tabBar 下面了。
下吗再来看看设置 tabBar.backgroundColor = UIColor.red 和 tabBar.barTintColor = UIColor.blue ,再看看下面的层次图。
![](https://img.haomeiwen.com/i49292/3f11e30931e8dba1.png)
backgroundColor 这个属性的确是起作用了,可惜的是它在最底层,你根本看不到,所以这是为什么设置背景还得要用 barTintColor 原因。 如果 isTranslucent = true 下,设置 barTintColor 会在 visualView 的最顶层增加一层视图,如果 isTranslucent = false 下,则直接更改的是 backgroundView 的背景色。
接下来,讨论下怎么给 tabBar 设置自己的半透明色。可能有人想着试着直接更改 barTintColor 的颜色透明不就好了?但是,给 barTintColor 设置颜色透明度总不会起效果,最后得到的都是不透明的,至于原因我也不清楚🍎的用意是为什么?
tabBar 还有一个 backgroundImage 属性,可以用一张图来代替背景色。比如我设置一张红色背景图上去,它的层次就变成了下图这样。
![](https://img.haomeiwen.com/i49292/ea9ec13e07f170e5.png)
设置了 backgroundImage 之后,会直接忽略 visualView 和你设的 barTintColor,而且这个背景图片是可以设置为透明图片的😄。所以你想要个透明的 tabBar ,直接设置一张透明图片给 backgroundImage 就可以了,如下图。
![](https://img.haomeiwen.com/i49292/1676676603889a48.png)
前面,我们说了,tabBar 的背景管理是交由 backgroundView 来设置的。现在 backgroundView 变成透明后,那 tabBar 的背景重担又重新回到了我们 tabBar.backgroundColor 身上了,它是可以支持任何透明度的设置的😊,比如,tabBar.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.5)
![](https://img.haomeiwen.com/i49292/fe1475066892a373.png)
最后说下 tabBar 分割线的问题,tabBar 的分割线其实是张图片,属性设置是 shadowImage,但是你单独设置 shadowImage 没有作用,只有你设置了 backgroundImage 后,shadowImage 才会起作用。
所以,最后设置一下 shadowImage 为红色图片,我们目标就达成了。😄
网友评论