带背景的自定义导航栏

Posted

技术标签:

【中文标题】带背景的自定义导航栏【英文标题】:Custom Navigation Bar With Background 【发布时间】:2018-05-20 10:31:35 【问题描述】:

由于我是 Swift 新手并正在研究我的 FYP,我有多个 VC,现在我将通过 .pushViewController(nextVC, animated: true) 访问下面附加的 VC。我正在尝试使导航栏透明,以便在导航栏后面显示背景图像:

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

这是我的代码,

override func viewDidLoad() 
    super.viewDidLoad()

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

希望你们能理解我的问题。任何帮助将不胜感激。 谢谢

【问题讨论】:

这个论坛上的任何人都可以帮助我。请 【参考方案1】:

经过长期的斗争,我得到了问题的解决方案。您可以说这很棘手,但可能对您使用 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 以从 Storyboard 将导航栏到达导航栏下方的状态栏顶部。

第3步:最后是

我已将故事板导航栏下的 Alpha 值设置为 0.5

这就是我的全部,并且非常适合我。您还可以在上述所有步骤之后看到我的输出。

enter image description here

【讨论】:

以上是关于带背景的自定义导航栏的主要内容,如果未能解决你的问题,请参考以下文章

iOS NavigationBar 导航栏自定义

导航栏的自定义 barTintColor

iPad导航栏自定义高度

Flutter导航栏自定义效果

iOS 11导航栏自定义后退按钮问题

如何减少iOS导航栏自定义视图的左右间隙