弹出框在 iPhone 上不起作用

Popover Doesn't Work on iPhone

我在我的应用程序中实现了一个 Popover 并对其进行了测试。它在 iPad 上运行良好,但当我在 iPhone 上测试它时,它不会显示 Popover,而是显示完整的故事板。请帮我。

这是我的代码:

@IBAction func MenuIsClick(sender: AnyObject) {
    var moveToNextVC:MenuViewController

    moveToNextVC = self.storyboard?.instantiateViewControllerWithIdentifier("MenuViewController") as! MenuViewController
    moveToNextVC.modalPresentationStyle = .Popover
    moveToNextVC.preferredContentSize = CGSizeMake(200, 200)

    if let popoverController = moveToNextVC.popoverPresentationController {
        popoverController.sourceView = sender as! UIView
        popoverController.sourceRect = CGRect(x: 0, y: 0, width: 85, height: 30)
        popoverController.permittedArrowDirections = .Any
        popoverController.delegate = self

    }
    presentViewController(moveToNextVC, animated: true, completion: nil)

}

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!, traitCollection: UITraitCollection!) -> UIModalPresentationStyle {
    return .None
}

编辑: 由于 Popover 在 iPhone 上不起作用,但是当引用此 EthanStrider/iOS-Projects 时它会正常工作。怎么样?

UIPopoverController's 仅适用于 iPad。

Popover controllers are for use exclusively on iPad devices. Attempting to create one on other devices results in an exception.

虽然使用iOS 8+,它不再崩溃,它将作为全屏模态呈现执行..

UIPopoverController 只能在 iPad 设备上使用。你可以参考Apple docs来验证。

如果你真的想要在 iPhone 上弹出一个弹出窗口,你可以使用像 WYPopoverController.

这样的第三方控件

您可以在其他地方使用此控件。

https://github.com/50pixels/FPPopover/

对我来说,问题是此委托方法中的 .none 参数。当我在它前面添加 UIModalPresentationStyle - 它开始工作了!

// Override the iPhone behavior that presents a popover as fullscreen
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.none
}

原因是我在项目的枚举中定义了另一个 .none 案例,其中包含另一个基础 Int 值(这当然是不好的做法,所以请一开始就避免这样做)。