如何创建像苹果那样的 Popover ViewController

Swi*_*ing 4 iphone xcode uiviewcontroller ios swift

如何ViewController在 iOS 中创建这种弹出框样式?我怎样才能使它适合它的内容并且不超出内容框架?

在此输入图像描述

我尝试将其更改modalPresentation为,.popover但据我尝试,它仅适用于 iPad 和 macOS,不适用于 iPhone。我希望有人能帮帮忙

saz*_*azz 14

您必须在 .popover 演示文稿中呈现一个新的 ViewController。
然后您可以根据需要自定义呈现的视图控制器。
主视图控制器应该如下所示:

class ViewController: UIViewController {

    @IBAction func buttonClicked(_ sender: Any) {
        //get the button frame
        /* 1 */
        let button = sender as? UIButton
        let buttonFrame = button?.frame ?? CGRect.zero

        /* 2 */
        //Configure the presentation controller
        let popoverContentController = self.storyboard?.instantiateViewController(withIdentifier: "PopoverContentController") as? PopoverContentController
        popoverContentController?.modalPresentationStyle = .popover

        /* 3 */
        // Present popover
        if let popoverPresentationController = popoverContentController?.popoverPresentationController {
            popoverPresentationController.permittedArrowDirections = .up
            popoverPresentationController.sourceView = self.view
            popoverPresentationController.sourceRect = buttonFrame
            popoverPresentationController.delegate = self
            if let popoverController = popoverContentController {
                present(popoverController, animated: true, completion: nil)
            }
        }
    }
}

extension ViewController: UIPopoverPresentationControllerDelegate {

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

    func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {

    }

    func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,您将在 PopoverContentController 中添加 TableView

class PopoverContentController: UIViewController {

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

    // Custom design&implementation
}
Run Code Online (Sandbox Code Playgroud)