Показать UIView из UIViewController в качестве предварительного просмотра контекстного меню - PullRequest
0 голосов
/ 02 ноября 2019

Я экспериментирую с iOS 13 и новым API UIContextMenu, и при попытке использовать предварительный просмотр контекстного меню я хотел показать маленькую карточку относительно нажатой UITableRow. Я создал UIViewController в своей раскадровке с UIView внутри, который содержит саму информационную карту (я сделал UIView, чтобы я мог легко изменить его размер с ограничениями). Я попытался только отобразить его, выполнив

@IBOutlet var infoCard = UIView!
override func loadView(){
    super.loadView()
    view = infoCard
    preferredContentSize = infoCard.bounds.size
}

Однако при отображении контекстного меню я вижу вид, но есть черный прямоугольник над и под картой, поскольку коэффициент предварительного просмотра не изменяется.

Как бы я отобразил эту информационную карту с другим соотношением? Спасибо!

1 Ответ

0 голосов
/ 03 ноября 2019

Мне, наконец, удалось сделать все правильно, проблема в том, что infoCard.bounds возвращает значение раскадровки, но мой вид имеет динамический размер, и Swift не пытается пересчитать видимую высоту / ширину до кадрабыл нарисован. Вот код, который работает для визуализации UIView внутри UIViewController, когда UIViewController отображается в предварительном просмотре контекстного меню:

// All this is inside the view controller, with cardView being the displayed view
loadViewIfNeeded()
updateViewConstraints()

// This will force Swift to recalculate the view's size
cardView.drawHierarchy(in: cardView.bounds, afterScreenUpdates: true)

view = cardView
preferredContentSize = cardView.bounds.size
...