0

我有 4 ViewControllers、A、B、C 和 D。

  • A 可以继续到 B、C 和 D。
  • B 可以继续到 C 和 D
  • C 可以继续到 D

(粗略地)显示为图表:

A - B - C
 \  |  /
    D

A 是 a 的根,UINavigationController也是初始的ViewController。出于某种奇怪的原因,每当我从 B 或 C 转到 D 时,D 的 the UIBarButtonItemsof D 根本不起作用。我以编程方式将它们添加到导航栏:

    let settingsButton = UIButton(type: .custom)
    settingsButton.frame = CGRect(x: 0, y: 0, width: 35, height: 35)
    settingsButton.contentMode = .scaleAspectFit
    settingsButton.setImage(UIImage(named: "settings-black.png"), for: .normal)
    settingsButton.addTarget(self, action: #selector(settingsPressed), for: .touchUpInside)
    settingsButton.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10)
    if #available(iOS 9.0, *) {
        settingsButton.widthAnchor.constraint(equalToConstant: 35).isActive = true
        settingsButton.heightAnchor.constraint(equalToConstant: 35).isActive = true
    }
    navigationItem.setLeftBarButton = UIBarButtonItem(customView: settingsButton)

Main.storyboard所有前面提到的ViewControllers都有一个NavigationItem。这些控制器之间的所有转场都是 Show(push) 转场。UIBarButtonItem当我将 B 和 D 以及 C 和 D 之间的转接更改为模态呈现时,我注意到D 功能起作用,但这只是一种解决方法。

4

1 回答 1

2

忠实于 StackOverflow 的魔力,我在解决问题的过程中找到了答案。

问题是这个小流氓代码行:

navigationController?.isNavigationBarHidden = false

在我的应用程序中使用导航栏时,我最终从隐藏的导航栏切换到了半透明的导航栏。将此代码留在这里意味着半透明导航栏UINavigationBar位于 D 中创建的顶部(一个容器ViewController,它自己以编程方式实例UINavigationController化为子 vc),从而阻止了我所有的用户输入。

希望这可以拯救别人一些挣扎!

快乐编码!:)

于 2018-05-30T21:34:31.573 回答