watchOS macOS tvOS ios swift

SwiftUI Backports

介绍 SwiftUI Backports 集合,让您的 iOS 开发更轻松。

许多 Backports 支持 iOS 13+,但当 UIKit 功能在更高版本中引入时,这些 Backports 也将适用,以保持与 UIKit 的对等性。

在某些情况下,我还加入了额外的 API,为您的 SwiftUI 开发带来更多功能。

请注意,所有 Backports 都将与 Apple 官方 API 保持 API 匹配,任何附加功能都将单独提供。

所有 Backports 都有完整的文档记录,在大多数情况下,为了保持一致性,使用了 Apple 自己的文档。请参阅头文件文档或 Apple 的原始文档以获取更多详细信息。

还有一个 演示项目 可用,您可以在其中看到所有 Backports 和附加功能的完整演示,包括帮助您入门的参考代码。

最后,我希望这个仓库也能作为一个很好的资源,了解如何以最小的 hack 技巧有效地进行 backport 👍

文档

完整的文档可以在这里找到。

赞助

构建像这样的实用库,会占用我陪伴家人的时间。我在业余时间构建这些工具,因为我觉得回馈社区非常重要。请考虑赞助我,因为这有助于我继续开发像这样的实用库 😬

您也可以随时关注我并给我一个“感谢”。

Twitter

用法

该库采用了 Dave DeLong 的 backport 设计,该设计使用单一类型来提高可发现性和可维护性,以便在将来移除您的 backport 实现,转而使用官方 API。

纯类型的 Backports 可以很容易地在 Backport 命名空间下找到。同样,修饰符可以在 .backport 命名空间下找到。

不幸的是,Environment Backports 无法通过这种方式访问,在这些情况下,Apple API 值将以 backport 为前缀,以简化发现。

类型

@Backport.AppStorage("filter-enabled")
private var filterEnabled: Bool = false

修饰符

Button("Show Prompt") {
    showPrompt = true
}
.sheet(isPresented: $showPrompt) {
    Prompt()
        .backport.presentationDetents([.medium, .large])
}

环境

@Environment(\.backportRefresh) private var refreshAction

Backports

SwiftUI

UIKit

附加功能

模态演示

将其添加到您呈现的视图中,您可以使用提供的闭包在用户尝试以交互方式关闭时呈现 ActionSheet。您也可以使用它来完全禁用交互式关闭。

presentation(isModal: true) { /* attempt */ }

FittingGeometryReader

一个自定义的 GeometryReader 实现,可以正确地自动调整自身大小以适应其内容。这在许多情况下都很有用,当您需要 GeometryReader 但不希望它隐式地占用其父视图的边界时。

FittingScrollView

一个自定义的 ScrollView,当内容不可滚动时,它会尊重 Spacer。当您需要在 scrollview 的边缘放置一个视图,而其内容又足够小,不需要滚动时,这非常有用。另一个很好的用例是垂直居中的内容,一旦内容需要滚动,它就会变为 top 对齐。

安装

您可以手动安装(通过复制 Sources 目录中的文件)或使用 Swift Package Manager(首选

要使用 Swift Package Manager 安装,请将以下内容添加到您的 Package.swift 文件的 dependencies 部分

.package(url: "https://github.com/shaps80/SwiftUIBackports.git", .upToNextMajor(from: "2.0.0"))