RefreshableScrollView

提供了一个 SwiftUI 的 ScrollView 实现,它支持 .refreshable 修饰符。

目前,在 SwiftUI 中实现下拉刷新行为的唯一方法是使用 List。但这可能并不总是你想要的,因为 List 存在一些性能问题。

此包中的视图旨在用于你想要下拉刷新,但不想使用 List 的情况。

此包提供了两种实现方式:

  1. 纯 SwiftUI 实现:RefreshableScrollView。 这种实现方式可以在导航视图中正常工作,并且具有一些提示标志,你可以传递这些标志来帮助调整刷新控件的布局。 缺点是,精确的下拉刷新行为与 UIKit 实现略有不同。 这是因为我们不能使用 UIRefreshControl,因为它只能附加到 UIScrollView 上,而我们没有 UIScrollView

  2. 使用 UIKit 的实现:NativeRefreshableScrollView。 这种实现方式使用真实的 UIScrollView,其中包含一个 UIHostingController,后者又包含 SwiftUI 内容视图。 这样做意味着我们可以使用 UIRefreshControl 作为活动/刷新指示器,并从 UIKit 获得精确的下拉刷新行为和外观。 缺点是,如果嵌入在 NavigationView 中,它的表现似乎不太好; 刷新控件的位置在刷新任务开始后立即发生变化,导致它消失,看起来很糟糕。

示例

请参阅 Extras/Example 文件夹中的示例 Xcode 项目,该项目使用了此包。

相关

我的 FastList 包是此包的客户端。 FastList 旨在替代 SwiftUI 的原生 List,适用于您拥有大量项目并且 SwiftUI 性能不佳(因为它试图进行花哨的动画)的情况。

鸣谢

此代码基于或受到以下一些示例的启发,包括:

感谢他们以及其他人的指引。