Mac: die Seitenleiste bekommt auch eine Obergrenze

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 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-13 16:00:26 +02:00
co-authored by Claude Opus 5
parent f8ada44a8c
commit 4150724394
+31 -8
View File
@@ -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