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