【问题标题】:Black view under navigation bar导航栏下的黑色视图
【发布时间】:2017-04-26 18:03:31
【问题描述】:

在我的应用程序中,我在导航控制器中嵌入了两个视图控制器(比如说 viewControllerA 和 viewControllerB)。在 rootviewcontroller 我不想显示导航栏,所以在 viewWillAppearviewWillDisappear 我添加了这些行:

override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.setNavigationBarHidden(true, animated: false)
    }

override func viewWillDisappear(_ animated: Bool) {
            self.navigationController?.setNavigationBarHidden(false, animated: false)
        }

现在,当在导航栏下键入后退按钮时(当它开始消失时),从 viewcontrollerB 出现黑色视图。如何删除那个黑色视图?

附:我已将导航栏isTranslucent 设置为 false,但这并不能解决问题。在我的项目中,我没有使用故事板。

【问题讨论】:

  • 你能更新一下你的问题的截图吗?
  • 抱歉,我无法添加屏幕截图,因为在导航堆栈中一个视图更改为另一个视图时会出现黑色视图,大约 1 秒(或更短)。所以我不能截图。问题是在导航栏消失期间,导航栏也有黑色视图
  • 黑色视图有多大..查看与您的帖子类似的帖子stackoverflow.com/questions/42120482/…
  • 我正在尝试从我的测试项目中复制您的问题。但它按预期工作。可能问题出在其他地方。发布您的 viewDidLoad 代码可能有助于找到解决方案。
  • 我创建了新的测试项目,我也遇到了同样的问题。请看这个(测试项目)dropbox.com/s/gtaxmho70btjqjs/TestNav.zip?dl=0

标签: swift uiview uiviewcontroller uinavigationcontroller


【解决方案1】:

以下基于问题所有者测试项目的答案。

在您的测试项目中,当您隐藏和取消隐藏导致黑色视图出现的导航栏时,您禁用了 navigationController 转换(视图到视图)动画。

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(true, animated: true) // set to true
}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(false, animated: true) //set to true
}

【讨论】:

  • 感谢您的帮助
  • 哦,伙计,真是个错误..我为这个问题争论了半天。就我而言,我刚刚做了self.navigationController?.setNavigationBarHidden(true)。添加动画道具解决了它..谢谢@Joe