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 弹出框在关闭后不会消失的主要内容,如果未能解决你的问题,请参考以下文章

使引导弹出框在悬停而不是单击时出现/消失

微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题

关闭弹出框后表格视图没有更新?

弹出框在状态栏中时的 NSPopover 瞬态

使用layer插件为啥弹出框没点确定就自动消失了

Bootstrap 3 弹出框在“响应”模式下不起作用