UINavigationController仅隐藏navigationBar - 返回动画问题

时间:2017-10-06 10:15:00

标签: ios swift uiviewcontroller uinavigationcontroller uinavigationbar

我在UINavigationController中有三个viewControllers。在第二个我需要隐藏导航栏但不隐藏后退按钮和其他栏按钮。因此我无法使用isNavigationBarHidden = true
目前我正在处理以上内容:

第一个viewController:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.barTintColor = Constants.kThemeRedColor
        self.navigationController?.navigationBar.tintColor = UIColor.white
        self.navigationController?.navigationBar.barStyle = .black
        self.navigationController?.navigationBar.isTranslucent = false
    }

第二个viewController(仅隐藏导航栏):

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController?.view.backgroundColor = UIColor.clear
    } 

这里的问题是当我从第一个ViewController导航到第一个ViewController时,在第一个viewController消失并且分别出现的时间非常短,我看到它上面有一个黑色的导航栏。我知道这是因为在第二个viewController中编写的代码。但我没有任何其他解决方案。附上截图:

第一个viewController(应该如何):

enter image description here

第二个viewController:

enter image description here

第一个viewController(黑色导航条持续时间很短):

enter image description here

3 个答案:

答案 0 :(得分:1)

First viewController中,还将backgroundImage的{​​{1}}和shadowImage设置为navigationBar,即

nil

答案 1 :(得分:0)

您应隐藏导航控制器的导航栏并使用UIView使用自定义导航栏。我认为这将解决您的问题。

答案 2 :(得分:0)

由于UIWindow的背景颜色正在发生导航条转换,因此第一个viewController在快速转换时显示黑色导航条的持续时间很短。简单地说,在你的didFinishLaunchingWithOptions:AppDelegate方法中添加这一行

window?.backgroundColor = Constants.kThemeRedColor

你完成了。快乐的编码!