从 UIViewController 显示 UIView 作为上下文菜单预览
Posted
技术标签:
【中文标题】从 UIViewController 显示 UIView 作为上下文菜单预览【英文标题】:Show UIView from UIViewController as a context menu preview 【发布时间】:2019-11-02 20:58:05 【问题描述】:我正在尝试使用 ios 13 和新的 UIContextMenu API,当尝试使用上下文菜单预览时,我想显示一张相对于被按下的 UITableRow 的小卡片。我在我的故事板中创建了一个 UIViewController,其中包含一个包含信息卡本身的 UIView(我制作了 UIView,以便我可以通过约束轻松更改其大小)。我尝试只通过这样做来显示它
@IBOutlet var infoCard = UIView!
override func loadView()
super.loadView()
view = infoCard
preferredContentSize = infoCard.bounds.size
但是,当显示上下文菜单时,我看到了视图,但卡片上方和下方都有黑色矩形,因为预览的比例没有改变。
如何以其他比率显示此信息卡?谢谢!
【问题讨论】:
【参考方案1】:我终于设法做对了,我遇到的问题是 infoCard.bounds 会返回故事板值,但我的视图具有动态大小,Swift 不会尝试重新计算可见高度/宽度,直到帧被画。当 UIViewController 显示在上下文菜单预览中时,以下代码可以在 UIViewController 中呈现 UIView:
// 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
【讨论】:
以上是关于从 UIViewController 显示 UIView 作为上下文菜单预览的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中实现可关闭的 UIView(不是 UIViewController!)
全屏 UIViewController 的 StatusBarStyle
Monotouch - UIViewController 中的 tableview:不会调用覆盖函数