Skip to content

Releases: adamtheturtle/MacPullToRefresh

0.3.1 — native-anchored indicator, steady spin

Choose a tag to compare

@adamtheturtle adamtheturtle released this 02 Jul 18:35
0673487

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")
```

0.3.0 — iOS-faithful pull-to-refresh motion

Choose a tag to compare

@adamtheturtle adamtheturtle released this 02 Jul 15:05
39b843f

Overhauls the macOS pull-to-refresh motion so the whole cycle reads like iOS end to end.

What changed

  • No more release bounce — the top gap is now reserved mid-drag the instant the pull crosses the threshold, so the scroll view's own elastic settle lands in the gap on release instead of snapping the rows up over the spinner.
  • Spinner comes alive at the top — rotation starts the moment the pull is armed and carries through release and refresh, with no static beat.
  • Smooth finish — the indicator fades out as the refresh ends, and the gap closes by scrolling the content up (then dropping the inset once it settles) so the rows glide back instead of jumping.

Install

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

0.1.0

Choose a tag to compare

@adamtheturtle adamtheturtle released this 02 Jul 07:20

Initial release of MacPullToRefresh.

A native-feeling pull-to-refresh for macOS SwiftUI, backed by the real NSScrollView rubber-band.

  • Native NSScrollView over-scroll — hooks willStartLiveScroll / bounds changes rather than a hand-rolled offset hack, so pulls feel native. On macOS, SwiftUI's .refreshable never fires from a gesture; this fixes that.
  • Works with SwiftUI List (and ScrollView) — handles List's quirk of placing its background outside its scroll view.
  • Liquid Glass indicator on macOS 26, with an opaque-material fallback on earlier systems.
  • Cross-platform call site — forwards to the native .refreshable on iOS, so .macPullToRefresh { } works on both without an #if.
  • Accessibility-scaled indicator, async refresh actions, and live-scroll gating to avoid false triggers at launch.

Requires macOS 13+ / iOS 16+, built with the macOS 26 SDK.