A product page whose buy bar docks to the bottom as the hero scrolls away.
A commerce detail screen: a cropped hero drawn in code, a variant picker that animates selection, a quantity stepper, and a purchase bar that docks under the fold and lifts back into the page at the top.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
Velvet (style), Shopping (brief), Shop and Track (recipe). Your agent builds around this screen in the same design.
How it behaves, what it handles, and the decisions behind it.
The bar has a seat in the page, below the colour swatches and size chips. A tall drawn hero owns the first screen with no chrome over it; scroll and the bar rises with the content until it reaches the bottom edge, where it stays: it docks, takes on a surface, a hairline and a shadow, and extends through the home indicator. Scrolling back releases it into its seat. Picking a colourway slides a ring between swatches and repaints the hero, picking a size slides a filled chip, and the stepper counts the total up as a number rather than swapping it.
DockingBarScroll measures its own bar: the seat always keeps the bar's height, so nothing jumps at the hand-off, and the footer is padded by that height so its last row clears the docked bar. dockGap is the extra distance above the bottom edge at which it docks; zero makes the hand-off seamless.isDocked binding lets the page fade in a compact title once the hero is gone.VariantPicker slides its selection with matchedGeometryEffect rather than blinking between options: a ring travels between colour swatches, a filled chip travels between sizes. Sold-out options are struck through and cannot be chosen.SPScenery, never photography: a flat field, an outline disc, a solid disc in the chosen colourway and two hard-edged planes, under the family's thin gilded rings.ProductDetailExample at the end of ProductDetail.swift is the screen shown in the preview; copy it as a starting point.Pieces that work well next to this one.