web-dev-qa-db-fra.com

iOS: problème d'affichage de la bordure popover dans l'iOS13

Le popover que j'affiche est maintenant mal affiché. Il manque une ligne du côté de la flèche. On peut vérifier qu'il y a un petit morceau de noir juste au bout de la flèche. Je pense qu'il y a une vue à l'intérieur qui est trop longue.

Code pour afficher le popover:

   _popoverController = UIPopoverController(contentViewController: navController)
   _popoverController?.delegate = self

   let rect = slotCollectionView.cellForItem(at: indexPath)!.frame
   self._popoverController?.backgroundColor = UIColor.init(rgb: Int(quaternaryColorHexa))
   self._popoverController?.present (from: rect, in: self.slotCollectionView, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true) 

Code pour lancer Popover:

override func viewDidLoad()
{
    super.viewDidLoad()

    self.preferredContentSize = contentSize()
    self.navigationController!.preferredContentSize = self.preferredContentSize;

    peopleTableView.isScrollEnabled = true
    peopleTableView.bounces = true
    peopleTableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
    peopleTableView.tableFooterView?.isHidden = true
    peopleTableView.backgroundColor = UIColor.init(rgb: Int(quinquenaryColorHexa))

    self.view.backgroundColor = UIColor.init(rgb: Int(quinquenaryColorHexa))
    self.view.layer.cornerRadius = 13.0
    self.view.layer.borderWidth = 1.5
    self.view.layer.borderColor = UIColor.init(rgb: Int(quaternaryColorHexa)).cgColor 

affichage iOS12:
iOS12
Affichage iOS13:
iOS13

8
ΩlostA

Je pense que c'est un bug iOS dans la version iOS13, et je vous conseille de faire votre propre popover en utilisant ce projet git:
DDPopoverBackgroundView

et en l'utilisant pour afficher le popover:

       // Popover
       _popoverController = UIPopoverController(contentViewController: navController)
       _popoverController?.delegate = self

       let rect = slotCollectionView.cellForItem(at: indexPath)!.frame

       self._popoverController!.contentSize = CGSize(width: 350, height: 600)

       self._popoverController!.backgroundViewClass = DDPopoverBackgroundView.self
       self._popoverController!.backgroundColor = UIColor.init(rgb: Int(quaternaryColorHexa)) //arrow color

       OperationQueue.main.addOperation({
           self._popoverController?.present(from: rect, in: self.slotCollectionView, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true)
       })

prendre plaisir ! ;-)

2
WikeC

Vous ne pouvez pas utiliser la zone de sécurité pour réagir à ce changement. Mon sentiment est que c'est un bug dans iOS 13 et je vais vous expliquer pourquoi ...

Lorsque vous avez une situation où vous utilisez UIPopoverArrowDirectionAny, vous verrez que le problème existe uniquement lorsque la flèche se trouve en haut ou à gauche du popover et non pas lorsque la flèche apparaît à droite ou en bas du popover. Si vous effectuez des ajustements dans votre code pour compenser, cela fonctionnera si vous utilisez UIPopoverArrowDirectionUp ou UIPopoverArrowDirectionLeft mais ne s'affichera pas correctement en utilisant cet ajustement lorsque vous utilisez UIPopoverArrowDirectionAny et la fenêtre contextuelle apparaît au-dessus ou à droite du rectangle cible.

2
SoftmasterG

Comme mentionné dans cette réponse c'est une nouvelle fonctionnalité d'iOS 13 que UIPopovers inclut les flèches dans leurs vues de contenu. Vous devez utiliser la zone de sécurité pour réagir correctement à ce changement.

2
alexkaessner