UIPopoverPresentationController программно созданный заполняет экран

Всплывающее окно, которое я создаю программно, заполняет экран. Как видно из примера кода, я пробовал много способов ограничить его размер, но ни один из них не работает. Кроме того, методы делегата не вызываются. Есть идеи? В прошлом я успешно использовал CALayer для такого рода вещей, но подумал, что это будет проще - возможно, нет.

@objc func touchDownHandler(sender: UISlider) {
    let popoverController = UIViewController()
    popoverController.view.backgroundColor = .red
    popoverController.view.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
    let textLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
    textLabel.text = "Hello World"
    textLabel.backgroundColor = .green
    popoverController.view.addSubview(textLabel)

    popoverController.modalPresentationStyle = UIModalPresentationStyle.popover
    popoverController.preferredContentSize = CGSize(width: 200, height: 200)

    if let popoverPresentation = popoverController.popoverPresentationController {
        popoverPresentation.delegate = self
        popoverPresentation.sourceRect = sender.frame
        popoverPresentation.popoverLayoutMargins = UIEdgeInsets(top: 10, left: 10, bottom: 210, right: 210)
        popoverPresentation.backgroundColor = .blue
        self.controller.present(popoverController, animated: true, completion: {
            print("pop over is visible")
        })
    }
}

1 ответ

Помните, что в соответствии с документацией Apple: "В горизонтально компактной среде параметр.popover ведет себя так же, как UIModalPresentationStyle.fullScreen". https://developer.apple.com/documentation/uikit/uimodalpresentationstyle/popover

Другие вопросы по тегам