我有一个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个像素的阴影。
答案 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))
}
}
}
输出
答案 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()
}