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


情形三:
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设置的颜色是否显现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容