UIPopoverController可以在屏幕上移动吗?

SSS*_*SSS 5 iphone animation ipad uipopovercontroller ios

一旦UIPopovercontroller已经呈现在屏幕上,是否可以将其移动?
我在我的应用程序中有一个小视图,可以稍微移动,我希望UIPopoverController随身携带,而不必每次移动时重新呈现UIPopoverController.这可能吗?

W D*_*son 1

从 iOS 9 开始,“UIPopoverController 已被弃用。Popover 现在被实现为 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:^{

    }];
Run Code Online (Sandbox Code Playgroud)

相反,我建议保留对随弹出窗口呈现的视图控制器的引用,关闭弹出窗口并重新呈现。

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:^{

    }];
}];
Run Code Online (Sandbox Code Playgroud)