在常规尺寸的iPhone上与UIPopoverPresentationController的内容交互?

时间:2018-05-09 21:37:00

标签: ios iphone uikit uipopovercontroller uipopoverpresentationcontroller

至少在默认情况下,您可以在加号iPhone上与popover的内容进行交互,并通过点击背景来解除它,在普通的非手机上,行为恰恰相反。< / p>

有没有人知道如何纠正和/或配置这个,以便您可以与常规iPhone上的popover进行交互?

我有一个示例来证明这个问题:
https://github.com/chrisco314/iPhone-Popover-Test

但相关代码是:

class PresentingViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        configure()
    }

    func configure() {
        view.addSubview(button)
        view.backgroundColor = .white
        button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        button.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true
    }

    lazy var button: UIButton = {
        let button = UIButton()
        button.layer.cornerRadius = 10
        button.contentEdgeInsets = .init(top: 8, left: 8, bottom: 8, right: 8)
        button.backgroundColor = .blue
        button.setTitle("Show popover", for: .normal)
        button.addTarget(self, action: #selector(didTap(sender:)), for: .touchUpInside)
        button.translatesAutoresizingMaskIntoConstraints = false
        return button
    }()

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @objc func didTap(sender: UIButton) {
        let presented = PresentedViewController()
        presented.modalPresentationStyle = .popover

        let popover = presented.popoverPresentationController!
        popover.delegate = self
        popover.sourceRect = sender.bounds
        popover.sourceView = sender
        popover.permittedArrowDirections = .up
        popover.backgroundColor = popover.presentedViewController.view.backgroundColor

        self.present(presented, animated: true, completion: {})
    }
}

extension PresentingViewController: UIPopoverPresentationControllerDelegate {

    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return .none
    }
}


class PresentedViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        configure()
    }

    func configure() {
        view.backgroundColor = .green
        view.addSubview(text)
        text.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
        view.rightAnchor.constraint(equalTo: text.rightAnchor, constant: 20).isActive = true
        text.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true
        view.bottomAnchor.constraint(greaterThanOrEqualTo: text.bottomAnchor, constant: 50).isActive = true
    }

    lazy var text: UITextField = {
        let view = UITextField()
        view.text = "Placeholder"
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = .blue
        return view
    }()
}

谢谢!

0 个答案:

没有答案