在自己实现的项目中需要隐藏掉 UINavigtionBar 底部的实线, 并在底部添加一个外观一样的 UIView, 用来实现为 NavigationBar “增高”的功能. 之前在 iOS9 中使用的方法失效了. Google 了一下找到的通用的办法.

我们将这个功能写在 UINavigationController 的 extension 中. 首先利用简单的递归找到底部那条实线.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
extension UINavigationController {
public func navigationBarLine(view: UIView) -> UIView? {
if view.isKind(of: UIImageView.classForCoder())
&& view.bounds.size.height <= 1.0 {
return view
}
for view in view.subviews {
if let imageView = navigationBarLine(view: view) {
return imageView
}
}
return nil
}
}

之后我们在 extension 中定义一个 navigationBarLine 的计算属性, 方便外部访问.

1
2
3
public var navigationBarLine: UIImageView {
return navigationBarLine(view: self.navigationBar) as! UIImageView
}

OK! Done.
这样我们就可以在需要的时候直接访问 navigationBarLine 属性来将其隐藏了.