情形一:
self.navigationBar.barTintColor = [UIColor redColor];
self.navigationBar.translucent = NO
進行如上顏色和透明度設置時,層級結構如圖,其中_UIBarBackground的顏色為barTintColor設置的顏色
情形二:
self.navigationBar.barTintColor = [UIColor redColor];
self.navigationBar.translucent = YES
將一種的translucent改為NO,圖中多了一層UIVisualEffectView視圖;UIVisualEffectView中有三個子視圖,其第二層視圖_UIVisualEffectFilterView為半透明色,會使barTintColor設置的顏色效果變暗,第三層顯示為barTintColor設置的顏色,即圖中的紅色視圖。
情形三:
self.navigationBar.barTintColor = [UIColor redColor];
self.navigationBar.translucent = YES
[self.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor greenColor]] forBarMetrics:UIBarMetricsDefault]
在情形二的基礎上添加背景圖片時,效果如下。由于添加了BackgroundImage,即使設置了透明圖層,UIVisualEffectView圖層也不會出現,另外barTintColor的顏色也看不到效果。這是因為barTintColor的顏色作用在_UIVisualEffectFilterView圖層上了。
情形四:
self.navigationBar.barTintColor = [UIColor redColor];
self.navigationBar.translucent = NO
[self.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor greenColor]] forBarMetrics:UIBarMetricsDefault]
在情形三的基礎上,修改translucent屬性為NO,此時可以看到_UIBarBackground的顏色為barTintColor設置的顏色
總結:
當translucent = YES時,層級結構中多一層UIVisualEffectView,navigationBar.barTintColor的顏色作用在UIVisualEffectView的子類_UIVisualEffectFilterView上;
-當translucent = NO時,UIVisualEffectView層隱藏,navigationBar.barTintColor的顏色作用在_UIBarBackground上;當設置了BackgroundImage,無論translucent為何值,UIVisualEffectView層都會隱藏,但會影響barTintColor設置的顏色是否顯現