swift - 弹出窗口指针未指向其调用者
swift - Popover pointer is not pointing towards its caller
我正在制作一个非常常规的弹出窗口,但无论我将其放置在何处,它都会指向呼叫者按钮的略上方。
我通过故事板连接了弹出窗口。在 popoverviewcontroller 中,我放置了一个包含按钮的视图。 popoverviewcontroller的viewdidload()的代码是:
override func viewDidLoad() {
super.viewDidLoad()
self.preferredContentSize = popoverView.frame.size
}
发生这种情况是因为我将按钮放置得太靠近顶部吗?
您需要使用 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(就像您使用故事板的情况一样),OS 会采用视图的原点,这就是弹出窗口箭头不正确的原因。指定合适的 sourceRect 将改善您的结果。
我正在制作一个非常常规的弹出窗口,但无论我将其放置在何处,它都会指向呼叫者按钮的略上方。
我通过故事板连接了弹出窗口。在 popoverviewcontroller 中,我放置了一个包含按钮的视图。 popoverviewcontroller的viewdidload()的代码是:
override func viewDidLoad() {
super.viewDidLoad()
self.preferredContentSize = popoverView.frame.size
}
发生这种情况是因为我将按钮放置得太靠近顶部吗?
您需要使用 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(就像您使用故事板的情况一样),OS 会采用视图的原点,这就是弹出窗口箭头不正确的原因。指定合适的 sourceRect 将改善您的结果。