【问题标题】:iOS Popover Does Not Go Away After DismissiOS 弹出框在关闭后不会消失
【发布时间】: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任务在后面跑?

标签: ios swift uiviewcontroller popover uipopovercontroller


【解决方案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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多