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 改变或者设置背景图片的话,底部还是会有一层浅色分割线,这是它的子视图导致的。
层级结构如图所示:
- 可以看到背景(UIBarBackground)上有两个 UIImageView。
- 上面那个大的框是背景图,另外一个就是分割线了
// UIBarBackground视图:
self.navigationController.navigationBar.subviews[0]
// UIBarBackground上的底部分割线视图:
self.navigationController.navigationBar.subviews[0].subviews[0]
// UIBarBackground上的背景视图:
self.navigationController.navigationBar.subviews[0].subviews[1]
navigationBar上的各个子视图都拿到了,接下来就可以进行自定义处理了。