如何在推送的View Controller中的导航栏下方添加一行?

时间:2018-11-29 04:48:55

标签: ios swift uinavigationcontroller

我有一个UINavigation控制器,用于推送或弹出视图。在“初始”视图控制器中,我想隐藏导航栏底部的1个像素阴影。所以这是代码。

func setup(){

        if #available(iOS 11.0, *) {
            self.navigationController?.navigationBar.prefersLargeTitles = true
            self.navigationController?.navigationItem.largeTitleDisplayMode = .always
        } else {
            // Fallback on earlier versions
        }

        self.navigationBar.isTranslucent = true


        self.navigationBar.clipsToBounds = true
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()

        self.navigationBar.tintColor = UIColor(hexString: "#373839")
        self.navigationBar.backgroundColor = UIColor.white

    }

但是当我按下第二个View控制器时,导航栏的阴影即使在其中也被隐藏了。

在“父视图”控制器中设置导航栏的属性是否会影响从其上推入的所有控制器中的属性?我以为导航栏特定于View控制器,导航控制器为每个推入的视图创建一个新的导航栏。

有人可以帮助我理解这一点,以及如何在导航栏上仅显示1个像素的阴影。

2 个答案:

答案 0 :(得分:3)

ViewController中添加以下代码,以更改NavigationBar's Shadow的颜色。

func addColorToShadow() {

     self.navigationController?.navigationBar.clipsToBounds = false
     self.navigationController?.navigationBar.shadowImage = UIColor(red: 215/255, green: 215/255, blue: 215/255, alpha: 1.0).image(CGSize(width: self.view.frame.width, height: 1))

}


extension UIColor {
    func image(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
        return UIGraphicsImageRenderer(size: size).image { rendererContext in
            self.setFill()
            rendererContext.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
        }
    }
}

输出

enter image description here

答案 1 :(得分:0)

我想。在导航控制器中更改导航栏的属性时,它将应用于所有视图控制器的导航栏。因此,您可能需要重置导航栏的属性。您是否尝试过如下所示?

例如:

//In viewWillDisappear
override func viewWillDisappear(_ animated: Bool) {

super.viewWillDisappear(animated)

self.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationBar.shadowImage = nil
}

//In viewWillAppear
override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
}