【问题标题】:swift - Popover pointer is not pointing towards its callerswift - Popover 指针未指向其调用者
【发布时间】:2016-07-25 14:00:37
【问题描述】:

我正在制作一个非常常规的弹出框,但无论我将它放在哪里,它都指向来电者按钮的上方。

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

override func viewDidLoad() {
    super.viewDidLoad()

    self.preferredContentSize = popoverView.frame.size
        }

是不是因为我把按钮放在离顶部太近了?

【问题讨论】:

  • 可以分享一下你的代码sn -p else 变得难以分析的问题吗?
  • @SHN 我已经添加了代码

标签: ios swift popover


【解决方案1】:

您需要使用 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 中链接pop over segue 意味着你已经提供了sourceView。根据 Apple 文档,要提供锚点,请将 sourceView 与 sourceRect 结合使用。我猜如果您不提供 sourceRect (就像您使用情节提要的情况一样),操作系统会获取视图的来源,这就是为什么弹出框的箭头不正确的原因。指定合适的 sourceRect 将改善您的结果。

【讨论】:

  • 我已经通过情节提要将它与锚点(在本例中为“Button4”)链接起来。如果我没有提供锚点,应用程序就会出错。问题是箭头指向略高于它的锚点。
猜你喜欢
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2012-03-15
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
相关资源
最近更新 更多