返回

揭秘 SwiftUI Sheet 扩展的强大魔力:如何在 SwiftUI 中实现 interactiveDismissDisabled!

IOS

在 SwiftUI 3.0 中,Apple 新增了一个功能强大的特性 —— interactiveDismissDisabled,可让您禁用 SwiftUI Sheet 的交互式关闭手势。这无疑为 SwiftUI 开发者带来了更多可能性和控制权,但要充分利用它,您需要掌握一些关键技巧。

探索 SwiftUI 3.0 中的 interactiveDismissDisabled 的神奇力量

interactiveDismissDisabled 允许您在用户在 Sheet 上拖动时禁用交互式关闭手势。这在某些情况下非常有用,例如当您希望用户在完成某些任务之前无法关闭 Sheet 时。

要使用 interactiveDismissDisabled,您需要在您的 Sheet 上设置一个 modifier,如下所示:

Sheet(isPresented: $isShowing) {
  // Your sheet content here
}
.interactiveDismissDisabled(true)

这将禁用 Sheet 的交互式关闭手势,并且用户将无法通过拖动来关闭它。

编写更 Swift UI 的功能扩展

您还可以创建一个功能扩展来简化 interactiveDismissDisabled 的使用。为此,您可以创建一个名为 MySheet 的结构体,如下所示:

struct MySheet: View {
  @Binding var isShowing: Bool
  var content: () -> AnyView

  var body: some View {
    Sheet(isPresented: $isShowing) {
      content()
    }
    .interactiveDismissDisabled(true)
  }
}

现在,您可以使用 MySheet 就像使用任何其他 View 一样。只需在 content 参数中传递一个闭包即可,该闭包将返回要显示在 Sheet 中的内容。

MySheet(isShowing: $isShowing) {
  AnyView(Text("Hello, world!"))
}

结论

interactiveDismissDisabled 是一个强大的工具,可让您对 SwiftUI Sheet 的行为进行更细粒度的控制。通过创建一个功能扩展,您可以使 interactiveDismissDisabled 更易于使用。

如果您想进一步了解 SwiftUI 中的 Sheet,我建议您查看 Apple 的文档。您还可以在 SwiftUI Lab 网站上找到一些很棒的教程和示例。

我希望这篇文章对您有所帮助。如果您有任何问题,请随时与我联系。