我正在制作一个非常普通的弹出框,但是无论放置在哪里,它都指向呼叫者按钮的上方一点。

我通过情节提要连接了弹出窗口。在popoverviewcontroller内部,我放置了一个包含按钮的视图。 popoverviewcontroller的viewdidload()的代码是:

override func viewDidLoad() {
    super.viewDidLoad()

    self.preferredContentSize = popoverView.frame.size
        }


发生这种情况是因为我将按钮放置得离顶部太近了吗?

ios -  swift -Popover指针未指向其调用者-LMLPHP

最佳答案

您需要使用sourceView和sourceRect属性为弹出框提供定位点。
利用展示控制器的prepareForSegue函数设置弹出窗口的属性,如下所示:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SegueIdentifier" {
        let destController = segue.destinationViewController
        let popover = destController.popoverPresentationController;

        destController.popoverPresentationController!.delegate = self
        destController.preferredContentSize = CGSize(width: 320, height: 186)
        popover?.sourceView = self.button;
        popover?.sourceRect = self.button.bounds
    }
}


您还可以在此处提供PreferredContentSize,因为这样可以使代码更具模块化,并且您的内容视图控制器也可以在其他地方使用。

以我的理解,在storyBoard中链接流行歌曲意味着您已经提供了sourceView。根据Apple文档,要提供定位点,请结合使用sourceView和sourceRect。我想如果您不提供sourceRect(如使用情节提要的情况),则OS会采用视图的原点,这就是弹出箭头不正确的原因。指定合适的sourceRect将改善您的结果。

关于ios - swift -Popover指针未指向其调用者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38569804/

10-08 20:50