From 4150724394291e4d9afeff7b61cc0c7112747ad1 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sun, 13 Sep 2026 16:00:26 +0200 Subject: [PATCH] Mac: die Seitenleiste bekommt auch eine Obergrenze MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Untergrenze allein war die halbe Arbeit. Eine Spalte, die sich nach ihrem Inhalt richtet, lässt sich ohne Deckel über das halbe Fenster ziehen — und genau das ging. Beide Zahlen stehen jetzt an einer Stelle: 190 Punkt schmal genug, dass die Leiste nicht bläht, 320 breit genug für lange Mediatheksnamen, und das ist zugleich die Breite, die eine Seitenleiste auf dem iPad hat. Die Beschriftungen tragen dieselben Grenzen, damit die Spalte nicht doch wieder an einem langen Wort hängen bleibt. Angefasst wird die Breite über den Inhalt der unteren Leiste — die sitzt in der Seitenleiste, also nimmt diese ihre Angabe an. Einen unmittelbaren Griff an die Spalte gibt es bei dieser Navigationsform nicht. Co-Authored-By: Claude Opus 5 --- Flixy/Views/Navigation/RootView.swift | 39 +++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/Flixy/Views/Navigation/RootView.swift b/Flixy/Views/Navigation/RootView.swift index 4907e0e..46495ea 100644 --- a/Flixy/Views/Navigation/RootView.swift +++ b/Flixy/Views/Navigation/RootView.swift @@ -246,6 +246,15 @@ struct RootView: View { .tabViewSidebarBottomBar { AccountBar(selection: $selection) .padding(.horizontal, FlixySpacing.snug) + // Der Griff, an dem die Spalte hängt: dieser Inhalt sitzt in + // der Seitenleiste, also nimmt sie seine Breitenangabe an. + #if os(macOS) + .navigationSplitViewColumnWidth( + min: Self.sidebarWidth.min, + ideal: Self.sidebarWidth.ideal, + max: Self.sidebarWidth.max + ) + #endif } .miniPlayer(player, isVisible: playback.presentation == .mini) } @@ -270,17 +279,27 @@ struct RootView: View { } } - /// Die Beschriftung eines Eintrags. + /// Die Breite der Seitenleiste auf dem Mac. /// - /// Auf dem Mac mit einer Mindestbreite. Die Seitenleiste richtet sich nach - /// ihrem Inhalt, und bei kurzen Wörtern wie „Start" fällt sie auf eine - /// Breite zusammen, in der schon der Kontoname darunter nicht mehr Platz - /// hat — auf dem iPad ist sie dreimal so breit, und genau dieser - /// Unterschied macht die beiden Oberflächen ungleich. + /// Sie richtet sich nach ihrem Inhalt. Ohne Untergrenze fällt sie bei + /// kurzen Wörtern wie „Start" so weit zusammen, dass der Kontoname darunter + /// abgeschnitten wird; **ohne Obergrenze** ließ sie sich über das halbe + /// Fenster ziehen. Beide Zahlen sind nötig, und die obere entspricht dem, + /// was eine Seitenleiste auf dem iPad breit ist. + #if os(macOS) + private static let sidebarWidth: (min: CGFloat, ideal: CGFloat, max: CGFloat) = + (min: 190, ideal: 230, max: 320) + #endif + + /// Die Beschriftung eines Eintrags. private func tabLabel(_ title: LocalizedStringKey, symbol: String) -> some View { let label = Label(title, systemImage: symbol) #if os(macOS) - return label.frame(minWidth: 170, alignment: .leading) + return label.frame( + minWidth: Self.sidebarWidth.min - 40, + maxWidth: Self.sidebarWidth.max - 40, + alignment: .leading + ) #else return label #endif @@ -290,7 +309,11 @@ struct RootView: View { private func tabLabel(_ title: String, symbol: String) -> some View { let label = Label(title, systemImage: symbol) #if os(macOS) - return label.frame(minWidth: 170, alignment: .leading) + return label.frame( + minWidth: Self.sidebarWidth.min - 40, + maxWidth: Self.sidebarWidth.max - 40, + alignment: .leading + ) #else return label #endif