我有一个 UIViewController,里面有一个我以编程方式制作的按钮(我们就叫它 MyViewController)。我试图在点击按钮时显示一个弹出框。让我们调用弹出框 DestinationViewController。点击该按钮将调用以下函数:
func buttonAction(_ button: UIView) {
var popover = storyboard?.instantiateViewController(withIdentifier: "destinationVC") as? DestinationViewController
popover?.popoverPresentationController?.delegate = self
popover?.modalPresentationStyle = .popover
popover?.popoverPresentationController?.sourceView = button
//popover?.popoverPresentationController?.sourceRect = CGRect(x: 0, y: 0, width: 50, height: 50)
popover?.preferredContentSize = CGSize(width: 200, height: 100)
present(popover!, animated: true, completion: nil)
}
(我注释掉了 sourceRect 行,因为它什么也没做,但我不知道我是不是用错了。)
此外,我确保 MyViewController 符合 UIPopoverPresentationControllerDelegate 协议。所以 MyViewController 实现了功能:
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
最后,在我的 DestinationViewController 故事板中,我选中了“使用首选显式大小”框,宽度为 200,高度为 100。
但是,我的 DestinationViewController 仍然全屏显示。我已经读到adaptivePresentationStyle 函数应该防止这种情况,但没有运气。我知道使用转场会使其正常工作,但我无法在情节提要中进行转场,因为我的按钮是以编程方式制作的。
关于我应该做些什么来解决这个问题的任何想法?我对制作popovers不太熟悉,所以我需要一些帮助。