【问题标题】:Swift 3 remove line underneath navbarSwift 3 删除导航栏下方的行
【发布时间】:2017-02-13 01:45:01
【问题描述】:

当我的项目在 Swift 2 中时,我的代码可以工作:

extension UINavigationController {
func hairLine(hide: Bool) {
    //hides hairline at the bottom of the navigationbar

    for subview in self.navigationBar.subviews {
        if subview.isKind(of: UIImageView.self) {
            for hairline in subview.subviews {
                if hairline.isKind(of: UIImageView.self) && hairline.bounds.height <= 1.0 {
                    hairline.isHidden = hide
                }
            }
        }
    }
}

}

但现在发生了一些变化,但它不起作用。不确定是因为 Swift 3 还是 iOS10,还是我现在正在使用 7plus 和 6s 进行测试,但它不再有效。我会在其中调用正在显示的视图控制器的 viewWillAppear。我在这里看到一个答案说要使用

    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)

但这并没有奏效。我尝试用这 2 行替换旧 hairLine() 的内容,尝试将它们直接放入 viewWillAppear 和 viewDidAppear 但仍然不适合我。

【问题讨论】:

    标签: swift swift3 uinavigationbar


    【解决方案1】:

    试试这个

    self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
    

    【讨论】:

      【解决方案2】:

      之前:

      之后:

      代码:

      override func viewDidLoad() {
          super.viewDidLoad()
      
          navigationItem.title = "Hello World"
          
          let navbarColor = UIColor(colorLiteralRed: (247/255), green: (247/255), blue: (247/255), alpha: 1)
          let image = UIImage()
          
          navigationController?.navigationBar.setBackgroundImage(image, for: .default)
          navigationController?.navigationBar.shadowImage = image
          navigationController?.navigationBar.backgroundColor = navbarColor
          
          let statusBarHeight = UIApplication.shared.statusBarFrame.height
          let statusBarWidth = UIScreen.main.bounds.size.width
          
          let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: statusBarWidth, height: statusBarHeight))
          statusBarView.backgroundColor = navbarColor
            
          view.addSubview(statusBarView)
        }
      

      【讨论】:

      • 这会破坏一些东西。状态栏变成白色而不是导航栏的颜色。我在导航栏正下方有一个工具栏,即使它们设置为相同的颜色,现在导航栏和工具栏之间的颜色也会略有不同。但值得称赞的是,它确实删除了这条线哈哈
      【解决方案3】:

      试试:

      self.navigationController?.navigationBar.setBackgroundImage(_:UIImage(),
              for: .any,
              barMetrics: .default)
      self.navigationController?.navigationBar.shadowImage = UIImage()
      

      viewDidLoad()

      【讨论】:

        【解决方案4】:

        试试这个

        UINavigationBar.appearance().setBackgroundImage(_:
            nil,
            for: .any,
            barMetrics: .default)
        
        UINavigationBar.appearance().shadowImage = nil
        

        【讨论】:

        • 在 viewDidAppear & Load 中试过这个,但仍然有这条线。您在哪里调用此代码?我从嵌入导航栏中的控制器调用它,就像我对旧代码所做的那样。我应该尝试其他地方吗?
        • 我在嵌入导航栏中的控制器的 viewDidLoad 中有它。让我想想可能是什么问题。
        猜你喜欢
        • 2018-10-09
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 2021-07-02
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多