UINavigationBar层级和设置透明方法

1、UINavigationBar 的相关属性设置:
// 隐藏navigationBar
self.navigationController.navigationBarHidden = YES;

// 设置navigationBar透明
self.navigationController.navigationBar.subviews[0].alpha = 0;

// 去除navigationBar底部浅灰色的分割线
self.navigationController.navigationBar.subviews[0].subviews[0].alpha = 0;

// 设置navigationBar颜色
self.navigationController.navigationBar.barTintColor = [UIColor cyanColor];
  
// 设置navigationBar背景图片
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
2、原理:

UINavigationBar 最终显示效果是很多层View一起作用的,包括模糊滤镜的效果。所以只是把 barTintColor 改变或者设置背景图片的话,底部还是会有一层浅色分割线,这是它的子视图导致的。

层级结构如图所示:


UINavigationBar层级和设置透明方法_第1张图片
UINavigationBar层级结构
  • 可以看到背景(UIBarBackground)上有两个 UIImageView。
UINavigationBar层级和设置透明方法_第2张图片
两个UIImageView的位置
  • 上面那个大的框是背景图,另外一个就是分割线了
// UIBarBackground视图:
self.navigationController.navigationBar.subviews[0]

// UIBarBackground上的底部分割线视图:
self.navigationController.navigationBar.subviews[0].subviews[0]

// UIBarBackground上的背景视图:
self.navigationController.navigationBar.subviews[0].subviews[1]

navigationBar上的各个子视图都拿到了,接下来就可以进行自定义处理了。

参考链接:UINavgationBar全透明一行代码实现/ 任意颜色

你可能感兴趣的:(UINavigationBar层级和设置透明方法)