web-dev-qa-db-ja.com

iOS:iOS13でのポップオーバーボーダーの表示の問題

私が表示するポップオーバーが正しく表示されなくなりました。矢印側に欠けている線があります。矢印の先に少し黒い部分があることを確認できます。中には景色が長すぎると思います。

ポップオーバーを表示するコード:

   _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) 

ポップオーバーを初期化するコード:

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 

iOS12ディスプレイ:
iOS12
iOS13ディスプレイ:
iOS13

8
ΩlostA

IOS13バージョンのiOSバグだと思います。そのgitプロジェクトを使用して独自のポップオーバーを実行することをお勧めします。
DDPopoverBackgroundView

これをポップオーバーの表示に使用します。

       // 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)
       })

楽しい ! ;-)

2
WikeC

安全領域を使用して、この変更に対応することはできません。私の考えでは、これはiOS 13のバグであり、その理由を説明します...

UIPopoverArrowDirectionAnyを使用する状況では、矢印がポップオーバーの上部または左側にある場合にのみ問題が発生し、矢印がポップオーバーの右側または下部に表示される場合には発生しないことがわかります。コードで調整を行って補正する場合、UIPopoverArrowDirectionUpまたはUIPopoverArrowDirectionLeftを使用すると機能しますが、UIPopoverArrowDirectionAnyを使用しているときにその調整を使用すると正しく表示されず、ポップアップがターゲットの四角形の上または右側に表示されます。

2
SoftmasterG

この回答 で述べたように、UIPopoverのコンテンツビューに矢印が含まれるのはiOS 13の新機能です。この変更に適切に対応するには、安全領域を使用する必要があります。

2
alexkaessner