SwiftUIExtensions 库

GitHub

一个开源库,包含 SwiftUI 的实用工具和扩展。

XII 的 iOS、macOS 和 watchOS 应用程序中的各种项目开发的可重用组件。

安装

Swift Package Manager

  1. 在 Xcode 中,选择 “File” > “Swift Packages” > “Add Package Dependency”。
  2. 按照提示使用此仓库的 URL
  3. 选择 SwiftUIExtensions 库添加到您的项目中

依赖项

许可证

请参阅 LICENSE 文件。

文本大小写简写 (Source)

extension View {
  func standardcase() -> some View

  func uppercase() -> some View

  func lowercase() -> some View
}

用于应用 textCase ViewModifier 的简写。

拉伸 View 的简写 (Source)

extension Axis.Set {
  static let None: Axis.Set
  static let Horizontal: Axis.Set
  static let Vertical: Axis.Set
  static let All: Axis.Set
}

extension View {
  func stretch(
    _ axes: Axis.Set = [.horizontal],
    alignment: Alignment = .center
  ) -> some View
}

通过根据请求的 Axis 设置 maxWidth(和/或)maxHeight,将视图的 frame 设置为拉伸以填充其父视图。

ScenePhase 更改简写 (Source)

extension View {
  func onScenePhaseChanged(
    _ action: @escaping (ScenePhase) -> Void
  ) -> some View
}

ScenePhase 发生更改时调用 action。避免在 action 中执行长时间运行的任务,因为它从主线程调用。

URL 打开助手

跨平台 (iOS + macOS)

func sendUserToApplicationUrl(_ url: URL)

func sendUserToApplicationUrl(_ urlString: String)

iOS 专用

func sendUserToApplicationSettings()

iOS 键盘助手 (Source)

func hideKeyboard()

HiddenView 简写 (Source)

struct HiddenView : View {
  init()

  var body: some View { get }
}

一种特殊的视图,它没有可见的表示形式(透明的 0x0 像素视图),但仍然可以附加功能(例如 onChange(of:))。

注意: 如果在具有间距的容器视图(例如 VStack)中使用,此视图仍将被计为一个,并将添加意外的间距。

避免动画 (Source)

func doWithoutAnimations(_ block: @escaping () -> Void)

在禁用动画的事务中执行提供的代码块。

对于取消一些难以控制的动画(例如导航视图过渡)非常有用。

注意: 这有点不稳定,请您自行承担风险使用。

MomentarySwitch 实用工具 (Source)

class MomentarySwitch {
  init()

  func trigger(
    offDelaySeconds: Double = 0.0,
    switchOn: @escaping () -> Void,
    switchOff: @escaping () -> Void
  )
}

瞬时开关的实现:一种具有开/关状态的开关,可以重复打开,并在延迟后关闭。如果在关闭延迟结束之前多次触发,它会重新安排反应(相对于上次触发的时间)。理想情况下用于触发用户交互时的动画,并在用户停止交互足够长的时间后自动恢复。

注意: 开关本身将在后台线程上运行,但开/关回调在 @MainActor 上执行。