diff --git a/Flixy/Views/Player/PlayerModel.swift b/Flixy/Views/Player/PlayerModel.swift index 73919d8..83649c1 100644 --- a/Flixy/Views/Player/PlayerModel.swift +++ b/Flixy/Views/Player/PlayerModel.swift @@ -188,15 +188,6 @@ final class PlayerModel { /// `applyVideoFit()`. var videoFit: VideoFit = .fit - /// Wie viel unten ausgespart bleibt, damit Untertitel sichtbar sind. - /// - /// Im Füllmodus reicht das Bild über die untere Bildschirmkante hinaus — - /// und genau dort zeichnet AVFoundation die Untertitel. Statt sie - /// anzuschneiden, wird die **Bildebene** eingerückt: das kostet rund - /// zwanzig Punkt Bild und behält die Schrift. Im eingepassten Modus ist - /// der Wert null, weil dort ohnehin schwarze Balken liegen. - var subtitleBottomInset: CGFloat = 0 - /// Wo das Bild aufhört. /// /// Liegt bei `FlixyPlayback`, weil beide Engines es brauchen. Der Name diff --git a/Flixy/Views/Player/PlayerView.swift b/Flixy/Views/Player/PlayerView.swift index faf8da6..26c05fc 100644 --- a/Flixy/Views/Player/PlayerView.swift +++ b/Flixy/Views/Player/PlayerView.swift @@ -845,14 +845,17 @@ struct PlayerView: View { engine: model.engine, surface: model.surface, isActive: playback.presentation == .full, - // **Nur im Füllmodus.** Eingepasst liegt das Bild seit - // Neuestem ohnehin im sicheren Bereich — dort kann kein - // Untertitel mehr unter die Kante geraten. - // Im Füllmodus läuft das Bild bis an die Kanten; damit der - // Untertitel nicht darunter gerät, wird die **Ebene** unten - // eingerückt. Der rohe Wert genügt hier — es geht um die - // Bildschirmkante, nicht um die Mitte. - bottomInset: model.videoFit == .fill ? safeArea.bottom : 0 + // **Nur im Füllmodus, und nur wenn ein Untertitel läuft.** + // + // Füllend reicht das Bild über die untere Bildschirmkante hinaus, + // und genau dort zeichnet AVFoundation die Untertitel; die Ebene + // unten einzurücken rettet die Schrift. Läuft aber keiner, rettet + // es nichts — dann bleibt bloss ein schwarzer Streifen unter + // einem Bild, das gerade füllen soll. Das ist das Gegenteil + // dessen, wofür der Knopf da ist. + bottomInset: model.videoFit == .fill && model.selectedSubtitleTrack != nil + ? safeArea.bottom + : 0 ) // **Im Füllmodus kein Seitenverhältnis.** Die Fläche soll den Schirm diff --git a/Flixy/Views/Player/VideoSurface.swift b/Flixy/Views/Player/VideoSurface.swift index a6107ba..d9cf7b3 100644 --- a/Flixy/Views/Player/VideoSurface.swift +++ b/Flixy/Views/Player/VideoSurface.swift @@ -56,8 +56,8 @@ struct VideoSurface: View { /// Wie viel unten frei bleibt, damit Untertitel nicht abgeschnitten werden. /// - /// Siehe `PlayerModel.subtitleBottomInset`. Hier steht nur die Zahl; was - /// sie bedeutet, entscheidet das Modell. + /// Hier steht nur die Zahl; wann sie ungleich null ist, entscheidet + /// `PlayerView.surface(for:)`. var bottomInset: CGFloat = 0 var body: some View {