UITabBar 里的各種屬性在使用的使用總是傻傻分不清竹伸,比如辫樱,設(shè)置背景色,應(yīng)該用 barTintColor 匹摇,而不是我們以為的 backgroundColor咬扇,想設(shè)置它要透明的時候,barTintColor = UIColor.clear 又不起效果廊勃。我在這里用圖稍微解釋下原因懈贺,希望對大家有所幫助。
先定一個目標(biāo),我想要自定義 UITabBar 最終達(dá)到的效果要是這樣的梭灿。
一個 UITabBar 什么屬性都沒有自定義的時候画侣,默認(rèn)的層次情況應(yīng)該如下圖一樣。
其中堡妒,visualView 是在 backgroundView 中的子視圖配乱,可以說 tabBar 的背景管理都是在 backgroundView 中進(jìn)行的。
先來看看 isTranslucent 這個屬性涕蚤,這個默認(rèn)是 true宪卿,設(shè)為 false 之后,tabBar 的層次就變成下面這樣了
可以看到 backgroundView 中的 visualView 不見了万栅,backgroundView 的背景色變?yōu)?white 不透明的佑钾,后面 vc 的 view 也不在 tabBar 下面了。
下嗎再來看看設(shè)置 tabBar.backgroundColor = UIColor.red 和 tabBar.barTintColor = UIColor.blue 烦粒,再看看下面的層次圖休溶。
backgroundColor 這個屬性的確是起作用了,可惜的是它在最底層扰她,你根本看不到兽掰,所以這是為什么設(shè)置背景還得要用 barTintColor 原因。 如果 isTranslucent = true 下徒役,設(shè)置 barTintColor 會在 visualView 的最頂層增加一層視圖孽尽,如果 isTranslucent = false 下,則直接更改的是 backgroundView 的背景色忧勿。
接下來杉女,討論下怎么給 tabBar 設(shè)置自己的半透明色≡可能有人想著試著直接更改 barTintColor 的顏色透明不就好了熏挎?但是,給 barTintColor 設(shè)置顏色透明度總不會起效果晌砾,最后得到的都是不透明的坎拐,至于原因我也不清楚??的用意是為什么?
tabBar 還有一個 backgroundImage 屬性养匈,可以用一張圖來代替背景色哼勇。比如我設(shè)置一張紅色背景圖上去,它的層次就變成了下圖這樣呕乎。
設(shè)置了 backgroundImage 之后猴蹂,會直接忽略 visualView 和你設(shè)的 barTintColor,而且這個背景圖片是可以設(shè)置為透明圖片的??楣嘁。所以你想要個透明的 tabBar ,直接設(shè)置一張透明圖片給 backgroundImage 就可以了,如下圖逐虚。
前面聋溜,我們說了,tabBar 的背景管理是交由 backgroundView 來設(shè)置的“劝現(xiàn)在 backgroundView 變成透明后撮躁,那 tabBar 的背景重?fù)?dān)又重新回到了我們 tabBar.backgroundColor 身上了,它是可以支持任何透明度的設(shè)置的??买雾,比如把曼,tabBar.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.5)
最后說下 tabBar 分割線的問題,tabBar 的分割線其實是張圖片漓穿,屬性設(shè)置是 shadowImage嗤军,但是你單獨設(shè)置 shadowImage 沒有作用,只有你設(shè)置了 backgroundImage 后晃危,shadowImage 才會起作用叙赚。
所以,最后設(shè)置一下 shadowImage 為紅色圖片僚饭,我們目標(biāo)就達(dá)成了震叮。??