如何在具有backgroundColor

时间:2019-03-19 13:12:56

标签: ios swift uinavigationcontroller uinavigationbar

我有几个UIViewControllers,它们都有一个纯色backgroundColor。但是,在用户的个人资料上,我想在背景上显示模糊的个人资料图片,因此我需要透明的UINavigationBar。这很好。我的操作方式如下:

我所有的UIViewControllers都设置为具有透明的UINavigationBar,如下所示:

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

然后,我通过简单地创建一个矩形UIView并将所有边缘固定到UINavigationBar所在的位置来简单地添加一个“假”栏,虽然外观相同,但允许我拥有配置文件页面透明。但是,现在我需要使用“真实的” UINavigationBar,因为在我当前的方法中,当我显示键盘并动画化view.frame.origin.y以使屏幕向上移动时,它会变“在这个假的UINavigationBar上。

为此,我在此viewController中设置了barTintColor的{​​{1}}属性。第一次进入该视图然后进入配置文件页面时,会出现问题:它仍然是相同的纯色。直接启动后进入个人资料页面时,不会发生此问题。

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的UINavigationBar中的viewWillDisappear属性来“重置”,但这是行不通的:

barTintColor

可能有用:我大多数时候都使用推入过渡(肯定在相关的viewController之间)。仅使用present来显示弹出窗口或类似内容。代码中的所有内容-没有情节提要。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以使用Present代替Push。因此,您可以拥有两个不同的导航栏。