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

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

iOS 8.3 结构图
iOS 8.3 打印图
iOS 10.3 结构图
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设置无效的, 依然是默认值, 只有当两者同时改变才可以起作用.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,276评论 4 61
  • 自动生成表时报错,保存信息如下图所示: 可以看出提示 SQL 语法错误, 在 创建表后多了 type=MyISAM...
    Ethan_Walker阅读 748评论 0 1
  • 第五章世界 “龙飞,刚才对不起,我以为你在开玩笑,不过我们真的不可能”,到了房间王芸嫣转过身来对龙飞说道。 “...
    逸枫轩阅读 157评论 0 1
  • 多年以后的某一天,遥想小学数学考不及格天天盼周末但假期迟迟不来的日子,没想到由童年到青年成长的28年居然比风吹过头...
    樊江艳阅读 441评论 8 5
  • 美食,衣服,在步行街潮流时尚都在眼前,自己也买了一身,吃了三个烤肉串,地铁真的很方便,女生容颜分两种,一近远,二长...
    血脉的定数阅读 164评论 0 0