对于以下viewController层次结构,isUserInteractionEnabled
似乎没有按预期工作。
NavigationController(ViewController A)---推送到---> NavigationController(ViewController B)
在ViewController A的viewDidAppear
方法中,我将navigationController?.navigationBar.isUserInteractionEnabled
设置为false,并在ViewController B的viewDidAppear
方法中将其设置为true。但是,在弹出ViewController B并返回ViewController A时,导航栏仍然可以进行用户交互。任何有关为什么会发生这种情况的想法都非常感谢,提前感谢!
答案 0 :(得分:1)
这似乎是一个错误,你可以在主线程上做到这一点:
override func viewDidAppear(_ animated: Bool) {
//...
DispatchQueue.main.async {
self.navigationController?.navigationBar.isUserInteractionEnabled = false
}
}
但是这仍然留下了一个毫秒级的窗口,其中启用了navigationBar
的交互
你必须非常快。
我不会推荐你正在做的事情;即禁用navigationBar
您可能会失去back
能力,如果它有一个,因为您只是完全禁用navigationBar
。
建议:
由于导航堆栈中的每个viewController
都拥有它自己的navigationItem
,其中包含它自己的barButtonItems
,我建议您保留参考UIBarButtonItem
并明确启用/禁用它们。
即
@IBOutlet var myBarButtonItem: UIBarButtonItem!
override func viewDidAppear(_ animated: Bool) {
//...
myBarButtonItem.isEnabled = false
}
此外,此barButtonItem
的状态在此viewController
中处理,您无需在其他地方执行self.navigationController?.navigationBar.isUserInteractionEnabled = true
等操作。