如何使用背景颜色在透明导航栏和UINavigationBar之间切换

问题描述 投票:0回答:1

我有几个UIViewControllers都有一个坚实的backgroundColor。但是,在用户的个人资料中,我想在背景上显示模糊的个人资料图片,所以我需要一个透明的UINavigationBar。这非常有效。我这样做的方式如下:

我所有的UIViewControllers都设置为透明导航栏,如下所示:

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

然后我只需添加一个“假”条,只需创建一个矩形UIView并将所有边缘固定到UINavigationBar所在的位置,从而产生相同的外观,但允许我使配置文件页面透明。然而,我现在有一种情况需要使用“真正的”UINavigationBar,因为在我目前的方法中,当我显示键盘和动画view.frame.origin.y使屏幕向上移动时,它会“超过”这个假的UINavigationBar

因此我在这个viewController中设置了barTintColorUINavigationBar属性。当我第一次进入此视图然后转到配置文件页面时出现问题:它仍然是相同的纯色。直接启动后转到配置文件页面时,问题不会发生。

This is the desired result, which I can see when I go directly to a profile page.

This is what a normal viewController looks like, with the "fake" UINavigationBar

And this is the error. This happens when I first go to the viewController with the barTintColor set, and then to a profile page

有关如何解决此问题的任何提示?我尝试使用UINavigationBar设置“重置”viewController的viewWillDisappear中的barTintColor属性,但这不起作用:

override func viewWillDisappear(_ animated: Bool) {

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

}

可能很有用:我大多数时候都使用推送转换(肯定在相关的viewControllers之间)。仅使用present来显示弹出窗口或类似内容。代码中的一切 - 没有故事板。

任何帮助将不胜感激!

ios swift uinavigationcontroller uinavigationbar
1个回答
0
投票

您可以使用Present而不是Push。所以你可以有两个不同的导航栏。

© www.soinside.com 2019 - 2024. All rights reserved.