Snappable

一套 SwiftUI 自定义修饰符,用于使 ScrollView 可吸附对齐。

该库的目标是提供一种简单的方法来实现诸如轮播图和幻灯片之类的视图。

演示

Carousel demo Vertical demo

要求

注意

Snappable 包含了从 Introspect for SwiftUI 复制的代码 (#17),用于检测来自 UIScrollView 的滚动行为。 因此,此库在 iOS 或 SwiftUI 更新时可能变得脆弱。

安装

Swift Package Manager

.package(
  url: "https://github.com/hugehoge/Snappable.git",
  .upToNextMinor(from: "0.3.0")
)

CocoaPods

pod 'Snappable', '~> 0.3.0'

用法

基本用法

struct ContentView: View {
  @State private var items: [Item]

  var body: some View {
    ScrollView(.horiaontal) {
      LazyHStack {
        ForEach(items, id: \.self) { item in
          ItemView(item)
            .snapID(item)  // Step 1
        }
      }
    }
    .snappable()  // Step 2
  }
}
  1. .snapID(_:) 修饰符添加到 ScrollView 中的项目
    • snapID 内部应用了 .id(_:) 修饰符
  2. .snappable(_:mode:) 修饰符添加到 ScrollView

选项

对齐

可以将吸附对齐的锚点设置为一个选项。

.snappable(alignment: .leading)

可用的对齐参数如下

SnapMode (吸附模式)

您可以使用以下参数确定拖动结束后吸附的时机。

两个参数都与滚动减速速率一起设置。

.snappable(alignment: .center, mode: .afterScolling(decelerationRate: .fast))
.snappable(alignment: .center, mode: .immediately(decelerationRate: .normal, withFlick: false))