Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 快速爆裂锚_Ios_Swift_Uikit_Popover_Anchorpoint - Fatal编程技术网

Ios 快速爆裂锚

Ios 快速爆裂锚,ios,swift,uikit,popover,anchorpoint,Ios,Swift,Uikit,Popover,Anchorpoint,我试图在图像上显示一个弹出框,但尝试将锚点指向图像边框失败(图像是信息图标)。 这是我的密码: 按钮操作: @IBAction func infoTapped(_ sender: AnyObject) { self.performSegue(withIdentifier: "InfoPopOver", sender: nil) } extension AddExpenseViewController: UIPopoverPresentationControllerDel

我试图在图像上显示一个弹出框,但尝试将锚点指向图像边框失败(图像是信息图标)。 这是我的密码:

按钮操作:

@IBAction func infoTapped(_ sender: AnyObject) {
        self.performSegue(withIdentifier: "InfoPopOver", sender: nil)
    }
extension AddExpenseViewController: UIPopoverPresentationControllerDelegate {
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.none
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "InfoPopOver" {
            if let vctr = segue.destination as? MyPopOverViewController {
                vctr.modalPresentationStyle = .popover
                vctr.popoverPresentationController?.delegate = self
                vctr.popoverPresentationController?.sourceView = self.view
                vctr.popoverPresentationController?.sourceRect = infoIcon.frame

            }
        }
    }

}

class MyPopOverViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.preferredContentSize = CGSize(width: 185, height: 80)

    }
}
和准备阶段:

@IBAction func infoTapped(_ sender: AnyObject) {
        self.performSegue(withIdentifier: "InfoPopOver", sender: nil)
    }
extension AddExpenseViewController: UIPopoverPresentationControllerDelegate {
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.none
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "InfoPopOver" {
            if let vctr = segue.destination as? MyPopOverViewController {
                vctr.modalPresentationStyle = .popover
                vctr.popoverPresentationController?.delegate = self
                vctr.popoverPresentationController?.sourceView = self.view
                vctr.popoverPresentationController?.sourceRect = infoIcon.frame

            }
        }
    }

}

class MyPopOverViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.preferredContentSize = CGSize(width: 185, height: 80)

    }
}
下面是几个屏幕截图:


我得到的最好结果是手动设置坐标,但它不适合每种屏幕类型…

我将其更改为:

vctr.popoverPresentationController?.sourceView = infoIcon.superview
vctr.popoverPresentationController?.sourceRect = infoIcon.frame

通过这种方式,您可以确保您使用的是信息图标的superview,并且框架将位于正确的位置。

尝试将
sourceView
设置为
infoIcon
?效果非常好!谢谢!