提供了一个 SwiftUI 的 ScrollView 实现,它支持 .refreshable
修饰符。
目前,在 SwiftUI 中实现下拉刷新行为的唯一方法是使用 List。但这可能并不总是你想要的,因为 List 存在一些性能问题。
此包中的视图旨在用于你想要下拉刷新,但不想使用 List
的情况。
此包提供了两种实现方式:
纯 SwiftUI 实现:RefreshableScrollView
。 这种实现方式可以在导航视图中正常工作,并且具有一些提示标志,你可以传递这些标志来帮助调整刷新控件的布局。 缺点是,精确的下拉刷新行为与 UIKit 实现略有不同。 这是因为我们不能使用 UIRefreshControl
,因为它只能附加到 UIScrollView
上,而我们没有 UIScrollView
。
使用 UIKit 的实现:NativeRefreshableScrollView
。 这种实现方式使用真实的 UIScrollView,其中包含一个 UIHostingController,后者又包含 SwiftUI 内容视图。 这样做意味着我们可以使用 UIRefreshControl
作为活动/刷新指示器,并从 UIKit 获得精确的下拉刷新行为和外观。 缺点是,如果嵌入在 NavigationView 中,它的表现似乎不太好; 刷新控件的位置在刷新任务开始后立即发生变化,导致它消失,看起来很糟糕。
请参阅 Extras/Example
文件夹中的示例 Xcode 项目,该项目使用了此包。
我的 FastList 包是此包的客户端。 FastList 旨在替代 SwiftUI 的原生 List
,适用于您拥有大量项目并且 SwiftUI 性能不佳(因为它试图进行花哨的动画)的情况。
此代码基于或受到以下一些示例的启发,包括:
感谢他们以及其他人的指引。