UINavigationBar层级结构

情形一:
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设置的颜色,即图中的红色视图。


UINavigationBar层级结构_第1张图片
情形三:
self.navigationBar.barTintColor = [UIColor redColor]; 
self.navigationBar.translucent = YES
 [self.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor greenColor]] forBarMetrics:UIBarMetricsDefault]

在情形二的基础上添加背景图片时,效果如下。由于添加了BackgroundImage,即使设置了透明图层,UIVisualEffectView图层也不会出现,另外barTintColor的颜色也看不到效果。这是因为barTintColor的颜色作用在_UIVisualEffectFilterView图层上了。


UINavigationBar层级结构_第2张图片
情形四:
self.navigationBar.barTintColor = [UIColor redColor]; 
self.navigationBar.translucent = NO
 [self.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor greenColor]] forBarMetrics:UIBarMetricsDefault]

在情形三的基础上,修改translucent属性为NO,此时可以看到_UIBarBackground的颜色为barTintColor设置的颜色


UINavigationBar层级结构_第3张图片
总结:
  • 当translucent = YES时,层级结构中多一层UIVisualEffectView,navigationBar.barTintColor的颜色作用在UIVisualEffectView的子类_UIVisualEffectFilterView上;
    -当translucent = NO时,UIVisualEffectView层隐藏,navigationBar.barTintColor的颜色作用在_UIBarBackground上;

  • 当设置了BackgroundImage,无论translucent为何值,UIVisualEffectView层都会隐藏,但会影响barTintColor设置的颜色是否显现

你可能感兴趣的:(UINavigationBar层级结构)