尝试以特定尺寸显示弹出控制器

Trying to display popover controller on certain size

找到几个如何使用弹出窗口的视频,并尝试只用故事板制作相同的视频,所以我明白了:

但是,使用应用程序 运行,当我按下按钮时,这个橙色的小控制器占据了所有的绿色屏幕,并且看起来不像我预期的那样带有箭头的小弹出窗口。

为了能够在弹出窗口中显示这样的 ViewController(橙色的),您必须将 modalPresentationStyle 定义为 popover 这样做:

class ParentViewController: UIViewController, UIPopoverPresentationControllerDelegate {
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return .none
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "PopoverSegue" {
            let popoverVc = segue.destination
            popoverVc.modalPresentationStyle = .popover
            popoverVc.popoverPresentationController?.delegate = self;
            popoverVc.preferredContentSize = CGSize(width: 250, height: 250)
        }
    }
}

记得在界面生成器中设置 segue 标识符(PopoverSegue 或其他):

以下自由格式大小(在运行时忽略)对于在界面构建器中模拟弹出视图很重要:

最终结果是:

根据需要调整大小、箭头和 sourceRect

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

   var des = segue.destination

    des.modalPresentationStyle = UIModalPresentationStyle.popover

    des.popoverPresentationController?.permittedArrowDirections = .left

    des.popoverPresentationController?.delegate = self

    des.popoverPresentationController?.sourceView = self.view

    des.popoverPresentationController?.sourceRect = CGRect.init(x: 300, y: 0, width: 50, height: 8 )

    des.preferredContentSize = CGSize.init(width: 200, height: 200)

}