Settings: keep tabs fixed, only content scrolls

This commit is contained in:
Peter Steinberger
2025-12-07 01:56:44 +01:00
parent 141d2b5626
commit b27f0dd490

View File

@@ -7,50 +7,47 @@ struct SettingsRootView: View {
@State private var selectedTab: SettingsTab = .general @State private var selectedTab: SettingsTab = .general
var body: some View { var body: some View {
ScrollView(.vertical) { TabView(selection: self.$selectedTab) {
TabView(selection: self.$selectedTab) { GeneralSettings(state: self.state)
GeneralSettings(state: self.state) .tabItem { Label("General", systemImage: "gearshape") }
.tabItem { Label("General", systemImage: "gearshape") } .tag(SettingsTab.general)
.tag(SettingsTab.general)
VoiceWakeSettings(state: self.state) VoiceWakeSettings(state: self.state)
.tabItem { Label("Voice Wake", systemImage: "waveform.circle") } .tabItem { Label("Voice Wake", systemImage: "waveform.circle") }
.tag(SettingsTab.voiceWake) .tag(SettingsTab.voiceWake)
ConfigSettings() ConfigSettings()
.tabItem { Label("Config", systemImage: "slider.horizontal.3") } .tabItem { Label("Config", systemImage: "slider.horizontal.3") }
.tag(SettingsTab.config) .tag(SettingsTab.config)
PermissionsSettings( PermissionsSettings(
status: self.permissionMonitor.status, status: self.permissionMonitor.status,
refresh: self.refreshPerms, refresh: self.refreshPerms,
showOnboarding: { OnboardingController.shared.show() }) showOnboarding: { OnboardingController.shared.show() })
.tabItem { Label("Permissions", systemImage: "lock.shield") } .tabItem { Label("Permissions", systemImage: "lock.shield") }
.tag(SettingsTab.permissions) .tag(SettingsTab.permissions)
SessionsSettings() SessionsSettings()
.tabItem { Label("Sessions", systemImage: "clock.arrow.circlepath") } .tabItem { Label("Sessions", systemImage: "clock.arrow.circlepath") }
.tag(SettingsTab.sessions) .tag(SettingsTab.sessions)
ToolsSettings() ToolsSettings()
.tabItem { Label("Tools", systemImage: "wrench.and.screwdriver") } .tabItem { Label("Tools", systemImage: "wrench.and.screwdriver") }
.tag(SettingsTab.tools) .tag(SettingsTab.tools)
if self.state.debugPaneEnabled { if self.state.debugPaneEnabled {
DebugSettings() DebugSettings()
.tabItem { Label("Debug", systemImage: "ant") } .tabItem { Label("Debug", systemImage: "ant") }
.tag(SettingsTab.debug) .tag(SettingsTab.debug)
}
AboutSettings()
.tabItem { Label("About", systemImage: "info.circle") }
.tag(SettingsTab.about)
} }
.padding(.horizontal, 28)
.padding(.vertical, 22) AboutSettings()
.frame(maxWidth: .infinity, alignment: .topLeading) .tabItem { Label("About", systemImage: "info.circle") }
.tag(SettingsTab.about)
} }
.frame(minWidth: SettingsTab.windowWidth, minHeight: SettingsTab.windowHeight) .padding(.horizontal, 28)
.padding(.vertical, 22)
.frame(width: SettingsTab.windowWidth, height: SettingsTab.windowHeight, alignment: .topLeading)
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.onReceive(NotificationCenter.default.publisher(for: .clawdisSelectSettingsTab)) { note in .onReceive(NotificationCenter.default.publisher(for: .clawdisSelectSettingsTab)) { note in
if let tab = note.object as? SettingsTab { if let tab = note.object as? SettingsTab {