MacPullToRefresh

0.3.1

Native-feeling pull-to-refresh for macOS SwiftUI, backed by the real NSScrollView rubber-band. Works with List, uses Liquid Glass, and forwards to .refreshable on iOS.
adamtheturtle/MacPullToRefresh

What's New

0.3.1 — native-anchored indicator, steady spin

2026-07-02T18:35:37Z

Refines the macOS pull-to-refresh so the indicator behaves like iOS even while the list is scrolled during a refresh.

What changed

  • Rows can no longer scroll over the spinner. The indicator is now hosted inside the scroll view's clip view, sitting in the gap just above the first row. AppKit carries it along with every scroll (including momentum) in the same pass as the rows — no bridge lag — and it clips away at the top edge as it rides off.
  • Rock-steady spin. The rotation is driven from a TimelineView clock instead of a repeatForever animation, which stuttered and changed pace when the hosted view re-rendered or scrolled. Also eased to 1.7s per revolution.

Install

```swift
.package(url: "https://github.com/adamtheturtle/MacPullToRefresh.git", from: "0.3.1")
```

MacPullToRefresh

Native-feeling pull-to-refresh for macOS SwiftUI, backed by NSScrollView over-scroll and forwarded to .refreshable on iOS.

Documentation | Swift Package Index

Demo

Pull past the top of a List or ScrollView: the indicator fills as you drag, arms once you pass the threshold, and spins while the refresh runs.

If the player above doesn't load, watch the clip directly.

Installation

.package(url: "https://github.com/adamtheturtle/MacPullToRefresh.git", from: "0.3.1")

Add the MacPullToRefresh product to your target dependencies.

Product

  • MacPullToRefresh: A SwiftUI modifier for pull-to-refresh on macOS and iOS.

Requirements

  • Swift 6.2+
  • macOS 13+ or iOS 16+

License

MIT. See LICENSE.

Description

  • Swift Tools 6.2.0
View More Packages from this Author

Dependencies

  • None
Last updated: Sun Jul 12 2026 09:42:39 GMT-0900 (Hawaii-Aleutian Daylight Time)