在上下文菜单中显示不同的视图 SwiftUI

Show a different view in context menus SwiftUI

我正在 SwiftUI 中开发 Mastodon 客户端,我希望允许用户从上下文菜单中查看 post 的预览,就像许多其他应用一样。

我知道我可以在 UIKit 中实现这一点,但我还没有看到如何在 SwiftUI 中实现。

例如,假设我有两个视图:CompactView 和 ExpandedView。 CompactView 由一个 Image 和一个 Text 组成,行限制为 2,因此每隔一行都被隐藏。 ExpandedView 也是由一个 Image 和一个 Text 组成,但文本的行数限制为 20,因此显示所有 post 内容。

如果用户强制触摸 CompactView,我想在上下文菜单中显示 ExpandedView 而不是 CompactView。我怎样才能做到这一点?

struct ContentView: some View {

    var body: some View {
        List(0 ..< 5) {
            CompactView()
        }
    }
}

struct CompactView: some View {

    var body: some View {
        HStack {
            Image("profile")
            Text(/*Post content goes here*/)
                .lineLimit(2)
        }
            .contextMenu {
                Button("Report", action: {})
            }
    }
}

struct ExpandedView: some View {

    var body: some View {
        HStack {
            Image("profile")
            Text(/*Post content goes here*/)
                .lineLimit(20)
        }
    }
}

我的代码库不是这样的,但我猜方法是一样的。

TL;DR:当用户强制触摸 SwiftUI 中的视图时,如何显示不同的视图?

提前致谢。

首先我们需要这个 - Simple way to implement preview context menu for SwiftUI

例如我的内容视图

struct ContentView: View {

let deleteAction = UIAction(
title: "Remove rating",
image: UIImage(systemName: "delete.left"),
identifier: nil,
    attributes: UIMenuElement.Attributes.destructive, handler: {_ in print("Foo")})

var body: some View {
    NavigationView {
        Text("Hello, World!")
            .contextMenu(PreviewContextMenu(destination: Text("Destination"), actionProvider: { items in
                return UIMenu(title: "My Menu", children: [deleteAction])
            }))
    }
}}

It's gonna look like that