如何在iPhone中使用popover控制器

时间:2018-05-19 17:09:05

标签: ios uipopovercontroller uipopover uipopoverpresentationcontroller

我无法将popover控制器显示为iPhone中的popover,而它与iPad的效果非常好。

有关如何在iPhone中执行该操作的任何想法。

据我搜索,我找不到任何内容。

无论如何都要让popover出现在iphone中,因为它在iPad中很受欢迎!

1 个答案:

答案 0 :(得分:8)

在呈现之前将自己设置为popover视图控制器的委托,并实现委托方法adaptivePresentationStyle(for:traitCollection:)以返回.none。这将导致popover停止在iPhone上作为全屏呈现的视图控制器进行调整,并像iPad一样变成实际的弹出窗口。

这是一个完整的工作示例,它会根据按钮点击显示弹出窗口:

class ViewController: UIViewController {
    @IBAction func doButton(_ sender: Any) {
        let vc = MyPopoverViewController()
        vc.preferredContentSize = CGSize(400,500)
        vc.modalPresentationStyle = .popover
        if let pres = vc.presentationController {
            pres.delegate = self
        }
        self.present(vc, animated: true)
        if let pop = vc.popoverPresentationController {
            pop.sourceView = (sender as! UIView)
            pop.sourceRect = (sender as! UIView).bounds
        }
    }
}
extension ViewController : UIPopoverPresentationControllerDelegate {
    func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        return .none
    }
}