pushViewController 时禁用导航栏透明度

Posted

技术标签:

【中文标题】pushViewController 时禁用导航栏透明度【英文标题】:Disable navigation bar transparency while pushViewController 【发布时间】:2018-07-15 12:28:59 【问题描述】:

I have TableViewController embed in NavigationController, also I have DetailedViewController that should be opened when cell on in TableViewController is selected.

所以我打电话

navigationController?.pushViewController(DetailedViewController, animated: true)

我的导航栏设置:

navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.barTintColor = .green

DetailedViewController 的导航栏被隐藏

self.navigationController?.isNavigationBarHidden = true

当我看到从 TableViewController 到DetailedViewController 的推送动画时,我可以看到位于TableViewController 后面的Controller 中的一些内容,尽管导航栏对于此转换变得透明。

我能用它做什么?

【问题讨论】:

我不确定您的问题是什么,但我想如果您在推送DetailedVC之前将视图控制器(TableVC)的导航栏设置为隐藏,然后在完成时再次将其设置为隐藏假,你就成功了。 "DetailedViewController 的导航栏被隐藏"。请注意,从概念上讲,UINavigationController 中只有一个导航栏,而不是每个推送的视图控制器一个。单条可以隐藏/取消隐藏。那么在DetailedViewController 中的哪个位置(在哪个方法中)设置isNavigationBarHidden = true? 【参考方案1】:

这是编译器未定义的行为,您可以通过以下操作实现您的目标。

1) 选择导航控制器-> 导航栏。 2)取消勾选半透明属性。 (请参阅编辑器窗格)。 3)还从情节提要中隐藏导航栏。 4) 在需要的视图控制器中显示导航栏。

//显示导航栏的代码:

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.navigationController?.navigationBar.isHidden = false


override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(true)
    self.navigationController?.navigationBar.isHidden = true

【讨论】:

以上是关于pushViewController 时禁用导航栏透明度的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖 pushViewController 创建的导航栏的功能

pushViewController 为导航栏设置动画,但未显示新视图 [关闭]

pushViewController 后,如何禁用 backBarButtonItem?

UINavigationBar 立即消失,而带有动画的 pushViewcontroller 为真

PushViewController 全屏

带有在另一个类中声明的 pushViewController 的 UIButton