隐藏导航栏下方0.5像素高度的黑线

首先我们需要弄明白这条黑线是什么?

隐藏导航栏下方0.5像素高度的黑线_第1张图片
iOS 8.3 结构图
隐藏导航栏下方0.5像素高度的黑线_第2张图片
iOS 8.3 打印图
隐藏导航栏下方0.5像素高度的黑线_第3张图片
iOS 10.3 结构图
隐藏导航栏下方0.5像素高度的黑线_第4张图片
iOS 10.3 打印图

就如上图所示, 知道了黑线是什么, 接下来的处理就简单了, 但是由于iOS 8.3 与iOS 10.3版本之间控件的层次关系还是有些许差别的, 所以处理的时候需要注意一下, 至于控件层级哪个版本发生的改变, 由于我电脑上没安装一系列的模拟器, 所以暂时不确定, 推测是10.0之后(个人猜测, 未验证).

方法一: 找到黑线, 将其隐藏, 代码如下

// 页面将要出现时
override func viewWillAppear(_ animated: Bool) {
     super.viewWillAppear(animated)
     // 设置导航栏底部黑色线(0.5px)隐藏
     for subview in navigationController!.navigationBar.subviews[0].subviews {
          if subview.isKind(of: UIImageView.self) {
               subview.isHidden = true
          }
     }
}

// 页面将要消失时, 修改回来
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    for subview in navigationController!.navigationBar.subviews[0].subviews {
         if subview.isKind(of: UIImageView.self) {
              subview.isHidden = false
         }
    }
}

方法二:重置navigationController的navigationBar的backgroundImage和shadowImage, 代码如下:

// 下面的UIImage()需要带有半透明效果的一张图片, 由于我没有, 就暂时没设置
//如果像下面一样, 只是赋值一个没有真实图片的UIImage对象, 会发现导航栏已经完全透明了.
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
注意:单独设置shadowImage而backgroundImage仍然使用默认值, shadowImage设置无效的, 依然是默认值, 只有当两者同时改变才可以起作用.

你可能感兴趣的:(隐藏导航栏下方0.5像素高度的黑线)