Установите себя в качестве делегата контроллера всплывающего окна до того, как представит его, и реализуйте метод делегата adaptivePresentationStyle(for:traitCollection:)
для возврата .none
.Это приведет к тому, что поповер перестанет адаптироваться на iPhone в качестве полноэкранного контроллера представления и превратится в настоящий поповер, как на iPad.
Это полный рабочий пример, который представляет поповер в ответ на нажатие кнопки:
class ViewController: UIViewController {
@IBAction func doButton(_ sender: Any) {
let vc = MyPopoverViewController()
vc.preferredContentSize = CGSize(400,500)
vc.modalPresentationStyle = .popover
if let pres = vc.presentationController {
pres.delegate = self
}
self.present(vc, animated: true)
if let pop = vc.popoverPresentationController {
pop.sourceView = (sender as! UIView)
pop.sourceRect = (sender as! UIView).bounds
}
}
}
extension ViewController : UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return .none
}
}