Skip to content

fix(settings): give every nav row one shape, and stop the exercise-media rows centring themselves - #32

Merged
DX23876 merged 1 commit into
mainfrom
fix/settings-nav-rows
Sep 17, 2026
Merged

DX23876 merged 1 commit into
mainfrom
fix/settings-nav-rows

Conversation

@DX23876

@DX23876 DX23876 commented Sep 17, 2026 •

Copy link
Copy Markdown
Owner

Was kaputt war

Manage offline exercise media und Available equipment waren nackte Label in einem VStack, dessen jedes andere Kind die volle Breite füllt — also haben sie sich mittig zentriert, Icon und Text komplett mit dem Accent eingefärbt, kein Chevron gezeigt, und ihre Trefferfläche war nur so breit wie der Text. Zwischen dem Exercise media-Picker und der ersten der beiden fehlte außerdem der Divider.

Was sonst noch auffiel

Das richtige Muster gab es im selben File schon — farbige Identitäts-Kachel, Titel in textPrimary, Chevron in textTertiary — aber achtmal von Hand geschrieben, und die Kopien waren in sechs Formen auseinandergelaufen:

  • drei verschiedene HStack-Spacings (8 / 10 / default)
  • drei Chevron-Fonts, zwei davon rohes .system(size: 12, weight: .semibold) statt eines Tokens
  • Spacer() vs. Spacer(minLength: 0)
  • .contentShape(Rectangle()) auf der Hälfte vergessen

Was dieser PR macht

Zieht ein SettingsNavRow heraus und routet alle acht Zeilen darüber. Jede Zeile bekommt damit ein 44 pt Mindest-Touch-Target und die ganze Zeile als Trefferfläche. Dazu eine neue AppleInspiredColors-Id exerciseMedia, damit die Offline-Medien-Zeile eine eigene Identitätsfarbe hat statt des Default-Blaus.

Verifikation

  • xcodebuild … build für Strand (macOS) und NOOPiOS (iOS) — app-build.yml ist deaktiviert, es kompiliert also kein CI dieses App-Target-Swift.
  • StrandTests/SettingsSearchCatalogTests + SettingsDisclosureDefaultsTests: 9 Tests, 0 Fehler.
  • Im Simulator in Dark und Light angesehen.

swift test in StrandDesign zeigt 5 Fehler in PlaceholderTests.testRecoveryStateWords — die sind vorbestehend (auf sauberem Baum identisch) und locale-bedingt: der Test erwartet englische Zustandswörter, meine Maschine löst deutsch auf.

Analysis migration required: nein — reine Darstellung.

…dia rows centring themselves

Manage offline exercise media and Available equipment were bare Labels dropped into a VStack
whose every other child fills the width, so they centred themselves mid-list, tinted icon AND
text with the accent, offered no chevron, and gave a hit area only as wide as their text. A
divider between the Exercise media picker and the first of them was missing too.

The rest of Settings already had the right pattern — coloured identity tile, primary-text
title, chevron in tertiary — but written out by hand eight times, which had drifted into six
shapes: three HStack spacings, three chevron fonts (two of them raw .system(size:) rather than
a token), Spacer() versus Spacer(minLength: 0), and .contentShape forgotten on half of them.

Extract SettingsNavRow and route all eight through it. Rows now share a 44pt minimum touch
target and take the whole row as their hit area. Adds one AppleInspiredColors id,
exerciseMedia, so the offline-media row gets its own identity colour instead of the default
blue.

Verified: xcodebuild build for Strand (macOS) and NOOPiOS (iOS) — app-build.yml is disabled,
so no CI compiles this. StrandTests SettingsSearchCatalogTests + SettingsDisclosureDefaultsTests
pass (9 tests). Checked on the simulator in both dark and light.

Analysis migration required: no — presentation only.
Copilot AI balanced review requested due to automatic review settings September 17, 2026 18:40

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@DX23876
DX23876 merged commit 2c2617b into main Sep 17, 2026
21 of 22 checks passed
@DX23876
DX23876 deleted the fix/settings-nav-rows branch September 17, 2026 22:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants