iOS 13 - UIMenu 是不是有不显示其图像的错误?
Posted
技术标签:
【中文标题】iOS 13 - UIMenu 是不是有不显示其图像的错误?【英文标题】:Does iOS 13 - UIMenu have a bug that doesn't show its image?iOS 13 - UIMenu 是否有不显示其图像的错误? 【发布时间】:2020-02-13 18:11:00 【问题描述】:将以下代码粘贴到项目中:
“设备蜂蜜”旁边没有图像显示,即UIMenu
然而,图像显示在“复制”旁边,即UIACtion
。
我做错了吗?如果这是一个错误?有解决方法吗?
class ViewController: UIViewController
let tableview: UITableView =
let tv = UITableView()
tv.frame = UIScreen.main.bounds
return tv
()
override func viewDidLoad()
super.viewDidLoad()
view.addSubview(tableview)
tableview.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableview.delegate = self
tableview.dataSource = self
extension ViewController: UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if cell.detailTextLabel == nil
cell = UITableViewCell(style: .value1, reuseIdentifier: "cell")
cell.textLabel?.text = "Honey"
cell.detailTextLabel?.text = "ios developer"
return cell
@available(iOS 13.0, *)
func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration?
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil, actionProvider: suggestedActions in
return self.makeContextMenu(for: indexPath)
)
@available(iOS 13.0, *)
func makeContextMenu(for indexPath: IndexPath) -> UIMenu?
let copyAction = UIAction(title: "Copy", image: UIImage(systemName: "square.and.arrow.up")) [weak self] _ in
guard let self = self else return
let cell = self.tableview.cellForRow(at: indexPath)
let pasteboard = UIPasteboard.general
pasteboard.string = cell?.detailTextLabel?.text
guard let cell = self.tableview.cellForRow(at: indexPath), let title = cell.textLabel?.text else return nil
return UIMenu(title: "Device \(title) ", image: UIImage(systemName: "square.and.arrow.up"), children: [copyAction])
在 Apple 的 WWDC 演示中,他们能够做到这一点,如下所示:
【问题讨论】:
【参考方案1】:上下文菜单有两个部分:预览和菜单。两者都是可选的。 Apple 屏幕截图中的“杂货”是预览,而不是菜单。默认情况下,对单元格进行快照,并将快照显示为预览。 Apple 屏幕截图中的菜单本身没有图像,也没有标题。这也是你应该做的!最后一行
return UIMenu(...
...应该没有标题和图像。这个菜单,包含所有其他内容并返回的菜单,是 *** 菜单,它的显示方式不同(如您自己的屏幕截图所示)。它看起来最好没有标题,而且根本无法显示图像。它的工作就是包装其他所有内容并提供标识符,仅此而已。
然后你会得到这样的东西:
【讨论】:
那苹果是怎么做“杂货”的标题和图片的呢?显然我的标题正在显示.... “***”是关键。 API中的任何地方都提到过吗?你能把它包括在你的答案中吗? 我想没有内置类可以让我只分配标题和图像。对吗? 我不知道那是什么意思。你的意思是你想自己创建预览?当然可以。 我在问是否就像 tableviewcell 一样,您只需转储图像和文本并完成布局,PreviewProvider 是否有类似的东西?我宁愿不自己创建它:)【参考方案2】:这是更重要的评论
您在问题中显示的预览非常具有误导性。它看起来像菜单中的其他项目。然而,屏幕截图中的杂货部分是预览。一个更独特的预览会是这样的:
Image source
【讨论】:
【参考方案3】:我有同样的问题,关于 UIMenu init(title:image:identifier:options:children:) 的文档表示图像参数:
图片: 显示在菜单标题旁边的图像。
看起来像是打算在子菜单中使用,如本博客所示: UIMenu Comprehensive Guide
【讨论】:
以上是关于iOS 13 - UIMenu 是不是有不显示其图像的错误?的主要内容,如果未能解决你的问题,请参考以下文章