自定义导航栏有背景

时间:2018-05-20 10:31:36

标签: ios uinavigationcontroller uinavigationbar swift4

由于我是Swift的新手并且在我的FYP上工作,我有一个多个VC,现在我将通过.pushViewController(nextVC,animated:true)与下面连接的VC联系。我正在尝试使导航栏透明,以便在导航栏后面显示背景图像:

image

目前我的导航栏看起来像:

image

这是我的代码,

override func viewDidLoad() {
    super.viewDidLoad()

    //------
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.isTranslucent = true
}

希望你们明白我的问题。任何帮助将受到高度赞赏。 感谢

1 个答案:

答案 0 :(得分:0)

经过长时间的努力,我得到了解决方案。您可以说它很棘手,但可以使用Xcode 9及更高版本和swift 4为您提供帮助。

关于我的问题,我是通过pushViewController()来到这个VC的,所以当我到达那个VC时,我只是在这里使用ViewWillAppear()来改变我的NavBar并在移回之后从这个VC到以前的VC或任何其他控制器,所以我需要重置原始导航以支持它的原始样式,为此目的我使用viewWillDisappear()。

第1步:

override func viewWillAppear(_ animated: Bool) {

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.isTranslucent = true

}
override func viewWillDisappear(_ animated: Bool) {

    super.viewWillDisappear(animated)
    self.navigationController?.navigationBar.shadowImage = nil
    self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    self.navigationController?.navigationBar.isTranslucent = true

}

第2步:

为了增加导航栏高度,我在导航项的提示中添加了空格,并且还将y坐标设置为-20,以便从故事板导航栏下的导航栏上的状态栏到达导航栏的顶部。

第3步:最后和最后是

我在故事板的导航栏下设置了我的Alpha值是0.5

这一切都适合我,并且非常适合我。此外,您可以在完成所有步骤后查看我的输出。

enter image description here