swift - Popover指针没有指向它的调用者

时间:2016-07-25 14:00:37

标签: ios swift popover

我正在制作一个非常规则的弹出框,但无论我放在哪里,它都略高于调用者按钮。

我通过故事板连接了popover。在popoverviewcontroller里面,我放置了一个包含按钮的视图。 popoverviewcontroller的viewdidload()的代码是:

override func viewDidLoad() {
    super.viewDidLoad()

    self.preferredContentSize = popoverView.frame.size
        }

是否发生了因为我把按钮放得太靠近顶部了?

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要使用sourceView和sourceRect属性为popover提供锚点。 利用呈现控制器的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中链接pop over segue意味着你已经提供了sourceView。根据Apple文档,提供锚点使用sourceView与sourceRect一起使用。我猜你是否不提供sourceRect(在你的情况下使用故事板),操作系统采用视图的原点,这就是为什么弹出窗口的箭头不正确。指定合适的sourceRect将改善您的结果。