iOS 弹出框在关闭后不会消失
Posted
技术标签:
【中文标题】iOS 弹出框在关闭后不会消失【英文标题】:iOS Popover Does Not Go Away After Dismiss 【发布时间】:2018-12-31 05:48:13 【问题描述】:我们有一个视图控制器在单击时显示来自UIBarButtonItem
的弹出窗口。弹出框显示得很好,但是当我们单击弹出框内的取消按钮(调用dismiss(_:completion:)
)时,或者当我们在弹出框外部点击时,弹出框消失了。但是,视图控制器中显示弹出框的所有内容仍然不可点击。当我们检查视图层次结构时,我们可以看到弹出框以及它的UITrasitionView
仍然在窗口上,并且阻塞了它后面的视图控制器,即使在模拟器中弹出框不再可见。可能是什么原因?
我们已经正确设置了弹出框控制器的buttonBarItem
,并且它可以正确显示。只有当它被驳回时,问题才会出现。
代码如下所示:
let controller = SettingsController() // the settings controller
controller.popoverPresentationController?.barButtonItem = sender // the UIBarButtonItem
self.present(controller, animated: true, completion: nil)
即使我们将 SettingsController
替换为普通的 UIViewController
,也不会发生任何变化。
附:这个呈现视图控制器的视图控制器使用自定义转换,但是在检查带有断点的代码后,我们认为这不是自定义转换委托未参与弹出框的呈现/关闭的原因。
【问题讨论】:
能把dismiss的代码加进去吗? 你有没有像progress indicator
这样的ui任务在后面跑?
【参考方案1】:
打开视图
let vc = SettingsController()
vc.modalPresentationStyle = .overCurrentContext
let nav = UINavigationController(rootViewController: vc)
self.present(nav, animated: true, completion: nil)
关闭视图
self.dismiss(animated: true, completion: nil)
【讨论】:
【参考方案2】:self ViewController 是否嵌入在导航控制器中?如果是这样,请尝试
self.navigationController.present(controller, animated: true, completion: nil)
【讨论】:
以上是关于iOS 弹出框在关闭后不会消失的主要内容,如果未能解决你的问题,请参考以下文章