iOS 13 的presentationControllerDidDismiss() 在紧凑环境中未调用 Popover

swiftIOS

1个回答

写回答

losehoney

2025-06-12 15:05

+ 关注

IOS
IOS

IOS 13是苹果最新推出的操作系统版本,它带来了许多令人兴奋的新功能和改进。其中一个重要的更新是关于弹出视图控制器(Popover)的改进。在紧凑环境中,IOS 13中的popover弹出窗口在dismiss时没有调用presentationControllerDidDismiss()方法的情况。

在过去的IOS版本中,当用户点击弹出窗口外部或者在弹出窗口上滑动时,popover弹出窗口会自动关闭,并调用presentationControllerDidDismiss()方法,以便开发人员可以在此方法中执行一些清理工作。然而,在IOS 13中的紧凑环境中,这个方法却没有被调用,这给开发人员带来了一些困扰。

问题的现象

IOS 13中,当在紧凑环境下(比如在iphone上使用应用程序)使用popover弹出窗口时,如果用户点击弹出窗口外部或者在弹出窗口上滑动,弹出窗口会自动关闭,但是presentationControllerDidDismiss()方法却没有被调用。这就使得开发人员难以进行一些后续处理工作,比如释放资源或者更新界面。

解决方案

虽然IOS 13中的popover弹出窗口在紧凑环境中没有调用presentationControllerDidDismiss()方法,但是我们可以通过其他方式来解决这个问题。一种解决方案是使用popover的代理方法来监听popover窗口的关闭事件。我们可以通过实现UIPopoverPresentationControllerDelegate协议中的popoverPresentationControllerDidDismissPopover()方法来达到此目的。

下面是一个示例代码,展示了如何在IOS 13中监听popover窗口关闭事件:

Swift

class MyViewController: UIViewController, UIPopoverPresentationControllerDelegate {

// ...

func presentPopover() {

let popoverContent = MyPopoverContentViewController()

popoverContent.modalPresentationStyle = .popover

popoverContent.popoverPresentationController?.delegate = self

// 设置其他popover的相关属性

present(popoverContent, animated: true, completion: nil)

}

func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {

// 在这里执行一些清理工作或者更新界面

}

// ...

}

在上面的代码中,当我们调用presentPopover()方法来显示popover弹出窗口时,我们设置了popover的代理为当前视图控制器,并实现了popoverPresentationControllerDidDismissPopover()方法。当用户关闭popover窗口时,此方法将被调用,我们可以在此方法中执行一些清理工作或者更新界面。

尽管在IOS 13的紧凑环境中,popover弹出窗口没有调用presentationControllerDidDismiss()方法,但我们可以通过实现popover的代理方法来监听popover窗口的关闭事件。通过这种方式,我们可以在popover关闭时执行一些后续处理工作。这个解决方案可以帮助开发人员在IOS 13中更好地管理popover弹出窗口的生命周期。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号