Screen · Finance

Activity SwiftUI Screen

Account activity grouped by day, with rows that swipe to categorize, split or hide.

Account activity built on a finance row that swipes right into a category tray and left to split or hide, expands inline with a map slot and receipt items, rolls its amount and pulses while pending.

  • SwiftUI
  • iOS 17.0+
  • transaction-row
Get SwiftPieces Pro

$199 once, every piece included. See how installing works · Sign in

01

What's included

SwiftUI source you own, built on Apple frameworks only.

  • Swipe right into a category tray, left to split or hide
  • Rows expand inline with a map slot and receipt items
  • Rolling amounts and a pulse while pending
  • The Activity screen from the preview: balance, search and days

In the Build Kit

Studio (style), Personal Finance (brief), Send Money (recipe). Your agent builds around this screen in the same design.

Used in

Finance App (template)

02

Implementation notes

How it behaves, what it handles, and the decisions behind it.

The row shows a category tile, merchant, subtitle and an amount that tints for credits and rolls with numericText when it changes. Swipe right and a tray of category tiles scales in one by one; tap a tile to categorize with a firm haptic. Swipe left for split and hide. Tap the row to expand it in place with a spring, revealing a map slot and receipt line items with a total. Pending rows breathe the amount until they post.

Notes

  • States: resting, pressed, categorize tray open, actions open, expanded, pending.
  • The swipe is a simultaneousGesture with a 12pt minimum that only claims clearly horizontal drags, so it lives happily inside List and ScrollView. Limits rubber-band, predictedEndTranslation commits flicks, and a soft impact fires when a side opens.
  • Pass a changed FinanceTransaction value (new amount, isPending false, a category) and the row animates the difference; the tile symbol replaces with a symbol effect.
  • The map slot is any view; the default TransactionMapPlaceholder is a quiet fill with a pin, so no MapKit dependency until you want one.
  • VoiceOver reads the row as one button with Categorize, Split and Hide actions; the tray tiles are labeled buttons once open. Reduce Motion stops the pending pulse and shortens the springs.
  • TransactionRowExample at the end of TransactionRow.swift is the screen shown in the preview; copy it as a starting point.