删除 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 的模糊预览的主要内容,如果未能解决你的问题,请参考以下文章