A settings home with a collapsing profile header, grouped rows, toggles and sign out.
A settings home: a parallax profile header that collapses into an inline title, grouped rows with colored icon blocks, haptic toggles, pushed pages, a sign-out row with a confirmation sheet and a version footer, all from a declarative model.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
SettingsModelSwift Pieces Skill (setup), Native (style), Candy (style), Subscription Utility (brief), Onboarding to Paywall (recipe). Your agent builds around this screen in the same design.
Subscription App (template), Finance App (template), AI Assistant (template), Meditation App (template), Travel App (template), Sleep App (template), Smart Home App (template), Weather App (template), Meal Planner (template)
How it behaves, what it handles, and the decisions behind it.
Describe the page as a SettingsModel (profile, sections, rows with stable ids) and the screen does the rest. The profile header moves at half scroll speed, stretches on over-scroll and collapses into an inline avatar-and-name title. Rows sit in grouped surfaces with tinted icon tiles and a press highlight. Toggles tick with a soft haptic; navigation rows push nested pages and picker rows push a single-choice list, both entering with their groups sliding in along the push axis. Sign-out is a red row that confirms in a compact sheet whose button turns into progress while your async signOut runs, and a version footer closes the page.
NavigationStack, pass wrapsInNavigationStack: false: the screen skips its own stack and pages push onto the enclosing one. The templates embed it this way.toggle(Binding<Bool>), navigation(SettingsPage, value:), picker(options:selection:), action(() -> Void) and info(String). Pages nest freely; routes are resolved by id against the model, so bindings stay live on pushed pages.presentationDetents([.height(340)]), a visible drag indicator and a 32 pt corner radius; dismissal is disabled while signing out. A .warning haptic plays when it appears.SettingsScreenExample at the end of SettingsScreen.swift is the screen shown in the preview; copy it as a starting point.SPTheme tokens from @Environment(\.spTheme) and requires the design-system item. Set .environment(\.spTheme, YourTheme()) above the screen to re-skin it.color.bg, groups on spSurface(.e1) with radius.lg, and text, dividers, the plan badge and the sign-out row use textPrimary, textSecondary, separator, fill and danger. Navigation chrome and the picker checkmark use accent; switches use success.SettingsRow.tint is optional. Pass a color to give a row its own icon tile, or leave it nil for an accent tile with an accentOn glyph.motion.standard and motion.bouncy, and pushed groups slide in with motion.hero, which becomes a short fade under Reduce Motion. The parallax header and collapse stay scroll-linked.Pieces that work well next to this one.