Wie bette ich ein Video in einer ScrollView ein (SwiftUI)?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Naja, um ein Video in einer ScrollView in SwiftUI anzuzeigen, muss man sicherstellen, dass das VideoView einen festen Höhenwert hat. Andernfalls wird die ScrollView versuchen, das Video auf eine Höhe von 0 zu skalieren, was dazu führen kann, dass es nicht angezeigt wird.

Du kannst das in deinem Code beheben, indem Sie die frame-Modifikation auf das VideoView anwendest und eine minimale und maximale Höhe angibst. Diese Höhenwerte sollten so gewählt werden, dass sie dem Höhenverhältnis des Videos entsprechen, damit es korrekt angezeigt wird.

So:

VideoView(videoID: "lKZaHgNmQ_o")
   .frame(minHeight: 0, maxHeight: UIScreen.main.bounds.height * 0.3)

Dies sollte das Video in der ScrollView anzeigen, ohne dass es verschwindet. Musst du bei dir halt bei beiden VideoView -Elemente anpassen.


PsySkill 
Beitragsersteller
 10.12.2022, 20:22

Danke erstmal für deine Antwort. Wenn du dir meinen Quellcode angesehen hast. müsstest du aber mitbekommen haben, dass ich das bereits implementiert habe.

Um ein Video in einer ScrollView in SwiftUI einzubetten, können Sie eine UIViewRepresentable-Komponente verwenden, um Ihr Video-Asset in ein UIView-Objekt zu konvertieren. Dann können Sie die UIView in Ihre ScrollView einfügen, indem Sie die UIView in ein AnyView-Objekt einbetten.

Hier ist ein Beispiel:

// Erstellen einer UIViewRepresentable-Komponente für das Video-Asset struct VideoView: UIViewRepresentable { let asset: AVAsset // Konvertiert das AVAsset in ein UIView-Objekt func makeUIView(context: UIViewRepresentableContext<VideoView>) -> UIView { let player = AVPlayer(playerItem: AVPlayerItem(asset: asset)) let playerLayer = AVPlayerLayer(player: player) let view = UIView() view.layer.addSublayer(playerLayer) return view } // Passen Sie die Größe der UIView an, wenn sich die Größe ändert func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<VideoView>) { if let playerLayer = uiView.layer.sublayers?.first as? AVPlayerLayer { playerLayer.frame = uiView.bounds } } } // Fügen Sie die UIView in eine ScrollView ein ScrollView { VStack { // ... VideoView(asset: myVideoAsset) // ... } }.edgesIgnoringSafeArea(.all) .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.black)

Hoffe, das hilft!


AlexLechner  10.12.2022, 20:16

Was ist das denn für ein Scheiss. Und warum SIEzt du auf ein mal?