Einstellungen: die Reiter schalten wieder, und die Leiste passt ins Fenster

Zwei Folgen der eigenen Reiterleiste, beide meine Schuld.

Der Reiter oben sprang um, der Inhalt blieb stehen: der gewählte Reiter liegt
im Fenster-Controller — er muss dort liegen, damit ein erneutes Öffnen ihn
setzen kann, etwa auf „Berechtigungen", wenn eine fehlt. Der Controller war
aber nicht beobachtbar. `TabView` fiel das nie auf, weil es seinen Zustand
selbst führte und die Bindung nur benachrichtigte. Ein `switch` im Rumpf
braucht dagegen eine Änderungsmeldung, und die kam nie. Jetzt ist der
Controller `@Observable`, und beide Richtungen funktionieren.

Zu breit war sie wegen `fixedSize`: sieben deutsche Beschriftungen brauchen
rund 880 Punkte, und die nahm sich die Leiste auch dann, wenn das Fenster 780
breit war — sie ragte links und rechts über die Kante hinaus, der erste und
der letzte Reiter waren nicht mehr erreichbar. Ohne feste Breite bleibt sie
im Fenster, und das Fenster ist jetzt 920 breit statt 780, mit 900 als
Mindestmaß. Darunter würde gestaucht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-08-13 23:38:40 +02:00
parent 2c3b3cdd55
commit ca9e272ad8
2 changed files with 25 additions and 11 deletions

View File

@@ -22,6 +22,8 @@ struct SettingsView: View {
let fanControl: FanControl
let launchAtLogin: LaunchAtLogin
let showOnboarding: () -> Void
/// Der gewählte Reiter liegt im Fenster-Controller, damit ein erneutes
/// Öffnen ihn setzen kann etwa auf Berechtigungen", wenn eine fehlt.
@Binding var selectedTab: SettingsTab
/// Die Reiter in der Reihenfolge, in der sie oben stehen.
@@ -50,9 +52,13 @@ struct SettingsView: View {
}
.pickerStyle(.segmented)
.labelsHidden()
// Nur so breit wie nötig und mittig: über die volle Fensterbreite
// gezogen sähen sieben Reiter aus wie eine Werkzeugleiste.
.fixedSize()
// Ohne feste Breite: sieben deutsche Beschriftungen brauchen rund
// 880 Punkte, und mit `fixedSize` nahm sich die Leiste die auch
// dann, wenn das Fenster schmaler war sie ragte dann links und
// rechts über die Kante hinaus. Das Mindestmaß des Fensters sorgt
// dafür, dass hier trotzdem nichts gestaucht wird.
.frame(maxWidth: 1000)
.padding(.horizontal, 20)
.padding(.top, 10)
.padding(.bottom, 14)