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