SwiftUIScroll 库

GitHub

一个开源库,提供 SwiftUI 库的扩展,以帮助处理滚动视图。

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

安装

Swift 包管理器

  1. 在 Xcode 中,选择 文件 > Swift Packages > Add Package Dependency(添加包依赖项)。
  2. 按照提示使用此仓库的 URL
  3. 选择 SwiftUIScroll 库以添加到您的项目

依赖项

许可证

请参阅 LICENSE 文件。

扩展的 ScrollViewState (源代码)

struct ScrollViewState {
  let proxy: ScrollViewProxy

  let scrollOffset: CGPoint

  let isScrolling: Bool

  let cancelScrolling: () -> Void
}

表示 ScrollView 的当前状态,包括

接收 ScrollViewState (源代码)

struct ScrollViewWithFeedback<Content : View> : View {
  init(
    _ axes: Axis.Set = .vertical,
    showsIndicators: Bool = true,
    @ViewBuilder contentBuilder: @escaping (ScrollViewState) -> Content
  )

  var body: some View { get }
}

一个类似于 ScrollViewReader 的视图,不仅提供 ScrollViewProxy,还提供滚动视图的当前偏移量和滚动状态。与 ScrollViewReader 不同,此视图本身充当 ScrollView,内容作为滚动视图内容呈现。

使用示例

struct FooView : View {
  var body : some View {
    ScrollViewWithFeedback { state in
      ForEach(0...100, id: \.self) { index in
        Text("Item: \(index)")
      }
      .onChange(of: state.scrollOffset) { position in
        print("OFFSET: \(position)")
      }
    }
  }
}

FeatheredScrollView (源代码)

struct FeatheredScrollView<Content : View> : View {
  init(
    maxFeatheredPercent: CGFloat = 0.05,
    @ViewBuilder content: @escaping (ScrollViewState) -> Content
  )

  var body: some View { get }
}

一个专门的 ScrollView,当用户开始向上滚动时,会对其内容应用羽化蒙版。最大羽化量限制为视图高度的请求百分比(默认为 5%)。