ViewBoundContextMenu

ViewBoundContextMenu 是一个 SwiftUI 组件,它实现了仅应用于定义它们的视图的上下文菜单。虽然 SwiftUI 的 contextMenu 视图修饰符也应该是这种情况,但它在 List 内部的视图中不起作用:在这种情况下,上下文菜单应用于整行。

这个问题已被多次报告。这里有一些例子

当前的解决方法是移除 List 并将其替换为 VStack (或 LazyVStackScrollView。这个解决方案并不理想,因为 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 与 iOSmacOSMac Catalyst 兼容。

ViewBoundContextMenu 目标平台为 iOS 13.0 或更高版本macOS 10.15 或更高版本。需要以下依赖项

贡献

欢迎所有为扩展库所做的贡献。Fork 仓库,进行您想要的更改,并打开一个 Pull Request。

如果您对代码库进行更改,我不会强制执行编码风格,但我可能会要求您根据库其余部分的制作方式进行更改。

状态

这个库正在 积极开发中。它在一个生产环境的应用中使用(运行在 iOS 和 Mac Catalyst 上)。

即使大多数 API 都非常简单明了,它们将来也可能会更改;但您不必担心,因为版本发布将遵循 语义化版本控制 2.0.0

许可证

RxFireAuth 在 MIT 许可证下分发。有关详细信息,请请参阅 LICENSE