ViewBoundContextMenu 是一个 SwiftUI 组件,它实现了仅应用于定义它们的视图的上下文菜单。虽然 SwiftUI 的 contextMenu
视图修饰符也应该是这种情况,但它在 List
内部的视图中不起作用:在这种情况下,上下文菜单应用于整行。
这个问题已被多次报告。这里有一些例子
当前的解决方法是移除 List
并将其替换为 VStack
(或 LazyVStack
) 和 ScrollView
。这个解决方案并不理想,因为 List
提供了不同的体验并支持额外的交互(例如滑动操作)。
ViewBoundContextMenu 解决了这个问题!
ViewBoundContextMenu 可通过 Swift Package Manager 获取。
.package(url: "https://github.com/MrAsterisco/ViewBoundContextMenu", from: "<see GitHub releases>")
要查找最新版本,请查看此仓库的 Releases 选项卡。
ViewBoundContextMenu 作为 ViewModifier
公开,您可以将其应用于任何视图
Text("Left Label")
.bold()
.viewBoundContextMenu {
[
.init(
identifier: "Unique Identifier",
title: "Action Title",
image: nil, // Optional,
children: [] // Optional,
action: { // Do something } // Passing `nil` will disable the menu item
)
]
}
菜单的内容由 ContextAction
数组定义
struct ContextAction {
let identifier: String
let title: String
let image: UImage?|NSImage? // Optional: images will not be displayed when running on Mac Catalyst.
let action: () -> ()
let children: [ContextAction] // Actions in this array will be displayed as submenu items.
}
要查看 ViewBoundContextMenu 的实际效果,您可以打开 ViewBoundContextMenu
工作区并运行 “ViewBoundContextMenuExample” 应用程序。
ViewBoundContextMenu 与 iOS、macOS 和 Mac Catalyst 兼容。
ViewBoundContextMenu 目标平台为 iOS 13.0 或更高版本 和 macOS 10.15 或更高版本。需要以下依赖项
SwiftUIX
版本 0.1.2。欢迎所有为扩展库所做的贡献。Fork 仓库,进行您想要的更改,并打开一个 Pull Request。
如果您对代码库进行更改,我不会强制执行编码风格,但我可能会要求您根据库其余部分的制作方式进行更改。
这个库正在 积极开发中。它在一个生产环境的应用中使用(运行在 iOS 和 Mac Catalyst 上)。
即使大多数 API 都非常简单明了,它们将来也可能会更改;但您不必担心,因为版本发布将遵循 语义化版本控制 2.0.0。
RxFireAuth 在 MIT 许可证下分发。有关详细信息,请请参阅 LICENSE。