Начиная с iOS 9, «UIPopoverController устарел. Поповеры теперь реализованы как презентации UIViewController. Используйте модальный стиль представления UIModalPresentationPopover и UIPopoverPresentationController."
Используйте следующее для представления всплывающего окна.Возможно, вы сможете изменить значения sourceRect и sourceView, но это не предназначенное поведение API.
DetailViewController *detailVC = self.detailViewController;
detailVC.preferredContentSize = CGSizeMake(420, 92);
detailVC.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *presController = detailVC.popoverPresentationController;
if (presController) {
presController.delegate = detailVC;
presController.barButtonItem = self.detailButton;
presController.sourceRect = self.view.frame;
presController.sourceView = self.view;
presController.permittedArrowDirections = UIPopoverArrowDirectionAny;
}
[self presentViewController: detailVC animated:YES completion:^{
}];
Вместо этого я предлагаю сохранить ссылку на контроллер представления, представленный с popover, отклонить popover иповторно представить.
DetailViewController *detailVC = self.detailViewController;
[self dismissViewControllerAnimated:NO completion:^{
UIPopoverPresentationController *presController = detailVC.popoverPresentationController;
if (presController) {
presController.delegate = detailVC;
presController.barButtonItem = self.detailButton;
presController.sourceRect = self.view.frame; //Update frame
presController.sourceView = self.view;
presController.permittedArrowDirections = UIPopoverArrowDirectionAny;
}
[self presentViewController: detailVC animated:NO completion:^{
}];
}];