Всплывающая стрелка смещена от центра при настройке UIPopoverPresentationController's barButtonItem

У меня есть UIBarButtonItem с изображением на моем контроллере навигации:

    infoItem = UIBarButtonItem(image: infoImage,
                               style: .plain, 
                               target: self,
                               action: #selector(infoAction))
    navigationItem.rightBarButtonItem = infoItem

При нажатии я делаю:

@objc func infoAction()
{
    let popoverContentController = InfoViewController()

    popoverContentController.preferredContentSize = CGSize(width: 300, height: 300)
    popoverContentController.modalPresentationStyle = .popover
    popoverContentController.popoverPresentationController?.delegate = self

    self.present(popoverContentController, animated: true, completion: nil)
}

Это тогда призывает UIPopoverPresentationControllerDelegate функции:

func prepareForPopoverPresentation(_ popoverPresentationController: UIPopoverPresentationController)
{
    popoverPresentationController.permittedArrowDirections = .any
    popoverPresentationController.barButtonItem = infoItem  <<=====
}

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

Там <<===== Я установил barButtonItem, Теперь я ожидаю, что стрелка всплывающего окна укажет на центр этого элемента. Но это не так:

Стрелка справа от центра

Глядя на иерархию представлений (ниже), мое изображение горизонтально отцентрировано в кнопке прямоугольной панели. Это совсем не на левой стороне, что объясняет смещение стрелки поповер.

Посмотреть иерархию

Есть идеи, что мне здесь не хватает, или как это можно исправить?

0 ответов

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