UINavigationController 仅在第二次出现视图时隐藏后退按钮

UINavigationController hides back button only on second appearance of view

我有三个视图控制器:一个登录视图、一个主表视图屏幕和一个详细表视图屏幕。这些都是同一个 UINavigationController 的一部分。在主屏幕上,我想禁用后退按钮,以防止用户返回登录屏幕。所以在 viewDidLoad() 函数中我有

// Home View
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.hidesBackButton = true
    ...
}

当这个视图出现时,没有后退箭头但是有字"Back."这个按钮没有任何作用,它似乎被禁用了。当我转到下一个视图(详细视图)时,后退按钮被隐藏。即使我将 hidesBackButton = false 添加到此视图的 viewDidLoad ,仍然没有。但是,在导航栏上向右滑动可以返回。

回到主屏幕后,后退按钮完全隐藏了。如果我要再次前进到详细视图,后退按钮会按需要显示。

事件顺序如下:

  1. 登录屏幕。登录后弹出主屏幕。

  1. 主屏幕。后退按钮在那里,它不应该在的地方。

  1. 详细视图。这个视图应该有一个返回按钮返回到主屏幕。滑动功能仍然可用,因此您可以通过滑动导航栏返回主屏幕。

  1. 当您返回时,后退按钮消失了!就像它应该的那样。

  1. 最后,返回(前进)到详细视图,后退按钮应该在那里。

在模拟器上我重置了内容和设置,这似乎解决了问题。

我仍然不知道为什么会出现这个错误。

实解

This 解决方案似乎对我有用!

我只是添加了

var HVC = segue.destinationViewController as! HomeViewController
HVC.navigationItem.setHidesBackButton(true, animated: false)

ViewController 中的 prepareForSegue 方法造成了问题 VC。

尝试添加这个:

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton

我遇到了与上述完全相同的问题,我的解决方案是使用:

self.navigationItem.setHidesBackButton(true, animated: false)

override func viewDidAppear { ... }

当我在 viewDidLoad 中使用 setHidesBackButton 代码时,我得到了完全相同的错误,但是按照说明移动它就成功了!