Der Serienname ist jetzt der Weg zur Serie
Unter dem Folgentitel stand „S2 E1" als Text, und wer zur Serie wollte, musste darunter eine Knopfreihe finden. Jetzt steht dort „Serienname · Staffel 2 · Episode 1", und Serienname wie Staffel führen dorthin, wohin sie zeigen. Der Name steht ohnehin da — dann soll er auch der Weg sein. `HeroBanner` nimmt dafür wahlweise eine fertige Zeile entgegen statt eines Textes. Gebaut wird sie beim Aufrufer, weil nur der weiß, wohin ein Teil führt; die Gestaltung kennt keine Ziele. Die Knopfreihe bleibt bei Staffeln, wo sie der einzige Weg nach oben ist, und entfällt bei Folgen. Beim Entfernen eines Downloads gibt es keine Rückfrage mehr. Sie stand da, weil „löschen" nach etwas Endgültigem klingt — es ist aber nur die heruntergeladene Kopie, der Titel bleibt auf dem Server. Wer nach links wischt und auf „Löschen" tippt, hat zweimal gesagt, was er will. Und das Umschalten sieht jetzt nach Umzug aus: die Seitenleiste klappt nach oben weg, die Leiste oben schiebt sich seitwärts herein — und zurück genauso. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
34593d9973
commit
be4b961641
@@ -8,6 +8,14 @@ import SwiftUI
|
||||
public struct HeroBanner<Actions: View>: View {
|
||||
private let title: String
|
||||
private let metadata: String?
|
||||
/// Eine Zeile, in der einzelne Teile anklickbar sind.
|
||||
///
|
||||
/// Steht sie, tritt sie an die Stelle von `metadata`. Gebaut wird sie beim
|
||||
/// Aufrufer, weil nur der weiß, wohin ein Teil führt — die Gestaltung
|
||||
/// kennt keine Ziele. `AnyView` statt eines weiteren Platzhaltertyps: der
|
||||
/// Aufmacher hat schon einen für die Knöpfe, und ein zweiter zöge sich
|
||||
/// durch jeden Aufruf.
|
||||
private let metadataContent: AnyView?
|
||||
private let summary: String?
|
||||
private let artworkURL: URL?
|
||||
/// Der freigestellte Schriftzug des Films. Steht er zur Verfügung, tritt
|
||||
@@ -24,6 +32,7 @@ public struct HeroBanner<Actions: View>: View {
|
||||
public init(
|
||||
title: String,
|
||||
metadata: String? = nil,
|
||||
metadataContent: AnyView? = nil,
|
||||
summary: String? = nil,
|
||||
artworkURL: URL?,
|
||||
logoURL: URL? = nil,
|
||||
@@ -37,6 +46,7 @@ public struct HeroBanner<Actions: View>: View {
|
||||
) {
|
||||
self.title = title
|
||||
self.metadata = metadata
|
||||
self.metadataContent = metadataContent
|
||||
self.summary = summary
|
||||
self.artworkURL = artworkURL
|
||||
self.logoURL = logoURL
|
||||
@@ -141,7 +151,11 @@ public struct HeroBanner<Actions: View>: View {
|
||||
VStack(alignment: .leading, spacing: FlixySpacing.snug * scale) {
|
||||
titleView(scale: scale)
|
||||
|
||||
if let metadata {
|
||||
if let metadataContent {
|
||||
metadataContent
|
||||
.font(.system(size: 12 * scale))
|
||||
.foregroundStyle(Color.flixyTextSecondary)
|
||||
} else if let metadata {
|
||||
Text(metadata)
|
||||
.font(.system(size: 12 * scale))
|
||||
.foregroundStyle(Color.flixyTextSecondary)
|
||||
|
||||
Reference in New Issue
Block a user