iOS 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层级结构
  • 可以看到背景(UIBarBackground)上有两个 UIImageView。
两个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全透明一行代码实现/ 任意颜色

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!
技术狗 » iOS UINavigationBar层级和设置透明方法