Eigene Seitenleiste — überall dieselbe
Die System-Seitenleiste sitzt auf dem iPad als schwebende Fläche und auf dem Mac angeklebt am Fensterrand. `preferredLayout = .overlap` ist die dafür vorgesehene Bitte, und macOS verwirft sie stillschweigend — gemessen, nicht vermutet. Statt deshalb die ganze Navigation neu zu bauen, bleibt der `TabView` stehen und verliert nur sein Kleid: `TabChromeSuppressor` blendet Seiten- und Tableiste aus, gezeichnet wird darüber. Auswahl, ein eigener Navigationsstapel je Eintrag, erhaltener Scrollstand beim Wechseln — all das macht weiter das System. Dass das Ausblenden geht, war kein Ratschluss: derselbe Griff hatte die Leiste vorher schon versuchsweise verschwinden lassen. Neu sind `FlixySidebar` (schwebende Fläche mit eigenem Rand, Mediatheken einklappbar, Konto unten) und `FlixyTopBar` (dieselben Einträge als Leiste oben, Mediatheken als Menü, weil oben der Platz waagerecht begrenzt ist). Das iPhone bleibt beim System: dort gibt es keine Seitenleiste, sondern die Leiste unten, und die ist überall dieselbe. Der Platz für die Leiste ist ein **Sicherheitsrand**, kein Abstand, und er hängt je Bildschirm — weder `TabView` noch `NavigationStack` reichen ihn an ihren Inhalt weiter. Damit bleibt eine Reihe fensterbreit und schiebt ihre Kacheln beim Wischen hinter die Leiste, stellt aber im Ruhezustand keine dorthin. Der Aufmacher darf über seinen Bereich hinaus; das `.clipped()` im Karussell musste dafür weichen, es schnitt genau das ab. Noch nicht dabei: „Bearbeiten" mit Ziehen und Ein-/Ausblenden. Die Einträge stehen in fester Reihenfolge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b4c2bd3970
commit
fccec1217b
@@ -44,10 +44,11 @@ final class LayoutSnapshots: XCTestCase {
|
||||
Thread.sleep(forTimeInterval: 2)
|
||||
shoot(app, "10-seitenleiste")
|
||||
|
||||
// Der Knopf oben rechts in der Leiste schaltet um. Er trägt keine
|
||||
// übersetzte Beschriftung, also über seine Stellung gesucht.
|
||||
let toggle = app.buttons.element(boundBy: 1)
|
||||
XCTAssertTrue(toggle.exists)
|
||||
// Über die Beschriftung gesucht, nicht über die Stellung: „der zweite
|
||||
// Knopf" war einmal der Umschalter und nach einem Umbau die Kontozeile,
|
||||
// und der Test öffnete fortan das Kontomenü.
|
||||
let toggle = app.buttons["Navigation nach oben"]
|
||||
XCTAssertTrue(toggle.waitForExistence(timeout: 5))
|
||||
toggle.tap()
|
||||
|
||||
for step in 0..<8 {
|
||||
|
||||
Reference in New Issue
Block a user