Я пытаюсь отобразить один UIViewController
как поповер из другого.Для этого я установил следующее ...
func showPopover(ofViewController popoverViewController: UIViewController, sender: UIView) {
popoverViewController.modalPresentationStyle = .popover
popoverViewController.popoverPresentationController?.sourceView = sender
popoverViewController.popoverPresentationController?.sourceRect = sender.bounds
popoverViewController.popoverPresentationController?.delegate = self
self.present(popoverViewController, animated: true, completion: nil)
}
Тем не менее, новый VC всегда отображается в виде полноэкранного модального представления на компактных устройствах, а не в виде реального поповера.Исходя из того, что я прочитал здесь & здесь , это нормальное поведение, но его можно настраивать с помощью делегирования.
Я объявил представляемый VC как реализующий UIPopoverPresentationControllerDelegate
, установить его в качестве делегата и реализовать необходимые методы;однако методы делегирования никогда не вызываются.Это означает, что «поповер» по-прежнему отображается модально, независимо от того.
Любой совет будет приветствоваться.
Некоторые другие выноски:
-
viewControllerForAdaptivePresentationStyle
вызывается , если перед ним добавлен маркер @objc
, но для остальных это не работает. - Xcode выдает предупреждение для каждого: Метод экземпляра... почти соответствует необязательному требованию ... протокола 'UIAdaptivePresentationControllerDelegate' ;однако сигнатура метода соответствует 100%.Не уверен, что это экземпляр этой ошибки , которая, как говорят некоторые, все еще существует в Xcode 10.1.
Спасибо.
Реализованы функции делегирования:
func adaptivePresentationStyle(for: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.popover
}
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return UIModalPresentationStyle.popover
}
func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
switch style {
case .fullScreen: // Configuration for full-screen
default: return controller.presentedViewController
}
}