UINavigationBar、UITabBar 透明

前言:首先了解UINavigationBar、UITabBar层级结构

UINavigationBar、UITabBar 透明_第1张图片

   1、UITabBar从1-7的排序依次是:

  • UIWindow
  • (红色部分) UILayoutContainerView
  • UITransitionView
  • UITabBar
  • _UIBarBackground
  • UIImageView
  • UIVisualEffectView
  • _UIVisualEffectBackdropView
  • _UIVisualEffectSubview

 

UINavigationBar、UITabBar 透明_第2张图片

   2、同理UINavigationBar排序依次是:

  • UIWindow
  • UILayoutContainerView
  • UINavigationTransitionView
  • UINavigationBar
  • _UIBarBackground
  • UIImageView
  • UIVisualEffectView
  • _UIVisualEffectBackdropView
  • _UIVisualEffectSubview
  • _UINavigationBarContentView

 

故此调整UINavigationBar透明度:

方式一:最直接有效的方式,设置 self.navigationController.navigationBar 的背景图为透明度的图片。

方式二:利用enumerateObjectsUsingBlock方法,修改或者隐藏每一层不透明的UI层。

例如:

[tabControl.tabBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
   if ([obj isKindOfClass:NSClassFromString(@"_UIBarBackground")]) {
       obj.hidden = YES;
   }
}];

方式三:利用其本身的属性,做调整。这种方式不了解系统属性,会走比较多弯路。

例如:

tabControl.tabBar.barStyle = UIBarStyleBlackTranslucent;
tabControl.tabBar.backgroundColor = [UIColor clearColor];

 

故此调整UITabBar透明度:

方式一:最直接有效的方式,设置 tabControl.tabBar.backgroundImage 的背景图为透明度的图片。

方式二:利用enumerateObjectsUsingBlock方法,修改或者隐藏每一层不透明的UI层。

例如:

[self.navigationController.navigationBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
   if ([obj isKindOfClass:NSClassFromString(@"_UIBarBackground")]) {
       obj.hidden = YES;
   }
}];

方式三:利用其本身的属性,做调整。这种方式不了解系统属性,会走比较多弯路。

例如:

self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

 

文中 Demo 我已放在了 博客 上,Demo 链接:任意门)

你可能感兴趣的:(IOS开发,NavigationBar透明,UITabBar,透明)