У меня есть 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 должна предотвратить это, но не повезло. Я знаю, что использование segue заставит его работать правильно, но я не могу сделать переход в раскадровке, потому что моя кнопка была сделана программно.
Есть идеи о том, что я должен сделать, чтобы это исправить? Я не очень хорошо разбираюсь в том, как делать поповеры, поэтому мне нужно немного помочь.