点击视图时出现导航栏

8

你在使用 SceneDelegate 吗? - Rob
let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as! UINavigationController let rootViewController:UIViewController = storyboard.instantiateViewController(withIdentifier: "NexaRootSideMenuViewController") as! NexaRootSideMenuViewController navigationController.viewControllers = [rootViewController] navigationController.isNavigationBarHidden = true appdelegate.window?.rootViewController = navigationController - kishor soneji
1
尝试这个:navigationController.setNavigationBarHidden(true, animated: false) - Rob
我也试过这段代码,但不起作用。 - kishor soneji
除了viewDidLoad()、viewWillAppear()或viewDidAppear()之外,你有没有编写与导航相关的任何内容?请检查一下是否误写,并找出它。 - Mr.Javed Multani
显示剩余6条评论
6个回答

3

最终这些解决方案对我行之有效

self.navigationController?.navigationBar.transform = CGAffineTransform(translationX: 0, y: -200)

3
这是一个解决方案,但它所做的是将导航栏移出屏幕。点击时显示导航栏的行为仍在发生。我建议解决真正的原因并提供适当的解决方案。 - Eelco Koelewijn

0

我之前也遇到了同样的问题。我删除了Storyboard并重新创建了viewController,问题就解决了。因此,我认为问题与viewController相关,而不是与NavigationController相关。我建议你也试试删除并重新创建viewController。


0
请将以下代码尝试放入您想要隐藏导航栏的ViewController中:

尝试

DispatchQueue.main.async {
    self.navigationController?.setNavigationBarHidden(true, animated: false)
    self.view.isUserInteractionEnabled = true
    //Below code conflicts with the hidden `NavigationBar` and make it visible on tap so set it false as below
    self.navigationController?.hidesBarsOnTap = false
}

并添加以下代码到其他你想要显示导航栏的ViewController中(不是每个其他ViewController,只是在你从这个ViewController推出或弹出的ViewController中)

self.navigationController?.setNavigationBarHidden(false, animated: true)

不好意思,当我点击屏幕时,导航栏会出现,请仔细观看视频。 - kishor soneji

0

尝试使用全局队列

DispatchQueue.global().async {
     navigationController?.setNavigationBarHidden(true, animated: animated)
}

或者在 viewDidAppear 中简单地添加这段代码。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    navigationController?.setNavigationBarHidden(true, animated: animated)
}

如果这两个方法都不起作用,那么请检查您的视图点击事件,可能添加了一些导航代码。

不好意思,当我点击屏幕时,导航栏会出现,请仔细观看视频。 - kishor soneji
1
我看到可能有一些事件在视图点击时被触发。 禁用视图的用户交互: self.view.isUserInteractionEnabled = false。 然后尝试在屏幕上轻触,导航是否仍然出现? - NøBi Mac
在NøBi Mac上,没有任何事件触发Tap。 - kishor soneji
你在屏幕上禁用了用户交互吗? - NøBi Mac
当您禁用父视图用户交互时,自动禁用子视图用户交互。 - kishor soneji
是的,我知道,但如果在那个时候视图交互被禁用,检查一下这个导航是否出现。 - NøBi Mac

0

在故事板中查看您的主要UINavigationController故事板属性,并取消选中“垂直紧凑时隐藏栏”,“轻击时隐藏栏”。这会导致导航栏在单击视图时出现。

如果您正在以编程方式创建UINavigationController,则使用以下代码。

UINavigationController().hidesBarsWhenVerticallyCompact = false
UINavigationController().hidesBarsOnTap = false

enter image description here


在您的viewWillAppear方法中更改以下内容:“navigationController?.hidesBarsOnTap = false”,并且我已经编辑了我的上面的答案并尝试,主要是取消Storyboard中“隐藏栏”部分下的所有选项。 - Sand'sHell811
重写函数viewWillAppear(_ animated: Bool) { self.navigationController?.setNavigationBarHidden(true, animated: true) self.navigationController?.isNavigationBarHidden = true self.navigationController?.hidesBarsOnTap = false } - Sand'sHell811
请查看我的视频。视图已经出现,但问题是在用户点击视图导航后的几次移动之后。@Sam'sHell811 - kishor soneji
我看了你的视频,你试过上面的步骤吗?这将解决你的问题。我创建了相同的场景,如果有人勾选了“轻敲时隐藏栏”和“垂直紧凑时隐藏栏”,那么就会出现这个问题,所以在Storyboard中取消勾选或者在代码中将这两个属性都设置为false。我看到你的代码中使用了hidesBarOnTap = true,这正是导致问题的原因,所以要将它改为false。 - Sand'sHell811

0

尝试以下操作

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.isNavigationBarHidden = true
}

override func viewWillDisappear(_: Bool) {
    super.viewWillDisappear(true)
    navigationItem.title = ""
}

请检查此解决方案。@kishor-soneji - JhonnyTawk
请查看@JhonnyTawk的视频。 最初导航栏被隐藏,当我单击窗口时,导航栏才会显示。 - kishor soneji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接