删除 SwiftUI 中 NavigationLink 上 ContextMenu 的模糊预览

Posted

技术标签:

【中文标题】删除 SwiftUI 中 NavigationLink 上 ContextMenu 的模糊预览【英文标题】:Remove Blurred Preview for ContextMenu on NavigationLink in SwiftUI 【发布时间】:2021-12-21 14:24:21 【问题描述】:

我正在尝试在 swiftUI 中将 contextMenu 添加到 NaviagationLink。如下图所示,模糊视图显示为预览。


NavigationLink 
    Text("Item at \(item.timestamp!, formatter: itemFormatter)")
 label: 
    Text(item.timestamp!, formatter: itemFormatter)
        .padding()

.contextMenu(
    ContextMenu 
        Button(action: 
            print("")
        ) 
            Label("Save", systemImage: "square.and.arrow.up")
        
    
)


private let itemFormatter: DateFormatter = 
    let formatter = DateFormatter()
    formatter.dateStyle = .short
    formatter.timeStyle = .medium
    return formatter
()

【问题讨论】:

您的itemFormatter 代码是什么样的? 已将itemFormatter 代码添加到问题中 【参考方案1】:

我整理了一些示例代码,看看我是否能理解这个问题。它是您视图中的基础文本,被 ContextMenu 操作模糊了。如果项目间隔足够大,我看不到模糊问题。这是我设置的代码示例。

struct ItemWithTimeStamp: Identifiable, Hashable 
var id: UUID

let timestamp: Date
let name: String



struct ContentView: View 

let examples = [ItemWithTimeStamp(id: UUID(), timestamp: Date(), name: "Thing One"), ItemWithTimeStamp(id: UUID(), timestamp: Date(timeInterval: 1234, since: .now), name: "Thing Two"), ItemWithTimeStamp(id: UUID(), timestamp: Date(timeInterval: 6543, since: .now), name: "Thing Three")]


var body: some View 
    NavigationView 
        VStack 
            ForEach(examples, id: \.id)  item in
                NavigationLink 
                    Text("Item at \(item.timestamp, formatter: itemFormatter)")
                 label: 
                    Text(item.timestamp, formatter: itemFormatter)
                        .padding()
                
                .contextMenu(
                    ContextMenu 
                        Button(action: 
                            print("Saved")
                        ) 
                            Label("Save", systemImage: "square.and.arrow.up")
                        
                    
                )

            
        
    




private let itemFormatter: DateFormatter = 
    let formatter = DateFormatter()
    formatter.dateStyle = .short
    formatter.timeStyle = .medium
    return formatter
()



这是激活上下文菜单之前的视图。

在这里,我正在激活 ContextMenu,您可以在背景中看到模糊的文本。但在我的情况下,项目之间的标准.padding() 没有发生重叠,所以我没有看到你得到的模糊问题。但我不确定你的其他视图是什么样的。

我不知道它是否适合您的目的,但您可以尝试将 NavigationLink 放在 List 中,因为它们肯定是分开的并且不会重叠。在我的代码中将 VStack 替换为 List 以查看此示例。

【讨论】:

以上是关于删除 SwiftUI 中 NavigationLink 上 ContextMenu 的模糊预览的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:删除列表中的动画?

在wordpress页面上设置向下导航状态的样式

从 SwiftUI 中的列表中删除绑定

删除列表中的黑色填充(SwiftUI)

如何在swiftUI中删除顶部安全区域

SwiftUI - 核心数据从按钮中删除项目