PageSheet

SwiftUI 中可定制的 Sheet 呈现方式。底层使用 UISheetPresentationController

特性

目录

要求

该代码库支持 iOS,需要 Xcode 12.0 或更高版本。

安装

Xcode

打开你的项目。导航到 File > Swift Packages > Add Package Dependency。输入 URL https://github.com/ericlewis/PageSheet 并点击 Next。选择 PageSheet 目标,然后按 Add Package

Swift Package Manager

将以下行添加到 Package.swift 文件中的 dependencies

.package(url: "https://github.com/ericlewis/PageSheet.git", .upToNextMajor(from: "1.0.0"))

接下来,将 PageSheet 添加为目标的依赖项

.target(name: "AppTarget", dependencies: ["PageSheet"])

一个完整的示例可能如下所示

// swift-tools-version:5.5

import PackageDescription

let package = Package(
    name: "App",
    dependencies: [
        .package(
          url: "https://github.com/ericlewis/PageSheet.git", 
          .upToNextMajor(from: "1.0.0"))
    ],
    targets: [
        .target(
          name: "AppTarget", 
          dependencies: ["PageSheet"])
    ]
)

示例

示例项目

如果你使用的是 Xcode 13.2.1,你可以导航到 Example 文件夹并打开随附的 Swift App Playground 来测试各种功能(并查看它们的实现方式)。

呈现

PageSheet 的工作方式类似于典型的 sheet 视图修饰符。

import SwiftUI
import PageSheet

struct ContentView: View {
  @State
  private var sheetPresented = false
  
  var body: some View {
    Button("Open Sheet") {
      sheetPresented = true
    }
    .pageSheet(isPresented: $sheetPresented) {
      Text("Hello!")
    }
  }
}

PageSheet 还支持通过条件 Identifiable 对象呈现。

import SwiftUI
import PageSheet

struct ContentView: View {
  @State
  private var string: String?
  
  var body: some View {
    Button("Open Sheet") {
      string = "Hello!"
    }
    .pageSheet(item: $string) { unwrappedString in
      Text(unwrappedString)
    }
  }
}

extension String: Identifiable {
  public var id: String { self }
}

自定义

PageSheet 也可以使用应用于 Sheet 内容的视图修饰符集合进行自定义。

import SwiftUI
import PageSheet

struct ContentView: View {
  @State
  private var sheetPresented = false
  
  var body: some View {
    Button("Open Sheet") {
      sheetPresented = true
    }
    .pageSheet(isPresented: $sheetPresented) {
      Text("Hello!")
        .preferGrabberVisible(true)
    }
  }
}

模块文档

PageSheet

PageSheet 分为三个不同的模块,其中 PageSheetCore 处理实现,PageSheetPlus 提供了一个名为 sheetPreferences(_:) 的新修饰符。同名模块是 PageSheet,它将 PageSheetCorePageSheetPlus 组合成一个单独的导入。

如果你只想使用 PageSheet 而无需额外的修饰符(以及额外的依赖项),请使用 PageSheetCore

PageSheetCore

PageSheetPlus

许可证

PageSheet 在 MIT 许可证下发布。 有关详细信息,请参见 LICENSE