列表 SwiftUI iOS 16 内的视频播放器 - 控件未显示

问题描述 投票:0回答:2

发现一个奇怪的情况。 在新版本的 iOS 中,如果视频播放器放置在列表中,则不会显示视频播放器的控件。

在 iOS 15.6.1 中,这段代码可以正常工作。

struct ContentView: View
{
    var body: some View
    {
        VStack{
            List(0..<2) { i in
                VStack
                {
                   
                    let vp = AVPlayer(url: URL(string: "http://wiu.ks-api.com/Content/file_3004.mp4")!)
                    
                    VideoPlayer(player: vp)
                        .frame(maxWidth: .infinity, idealHeight: 320)
                        .padding(.horizontal, -20)
                        .onDisappear{vp.pause()}
                }
            }
        }
    }
}

先谢谢大家了

swiftui-list ios16
2个回答
17
投票

您可以将

.clipped()
修饰符添加到
VideoPlayer()
它在 TabView 中工作
.tabViewStyle(.page)


0
投票

我找到的唯一解决方案是完全删除 VideoPlayer 结构,因为它看起来像是播放器上的一个愚蠢的包装器,并创建我们自己的

UIViewRepresentable

struct VideoPlayerTwo: UIViewRepresentable {
    private let controller: AVPlayerViewController
    
    init(player: AVPlayer) {
        let controller = AVPlayerViewController()
        controller.player = player
        controller.showsPlaybackControls = true
        
        self.controller = controller
    }
    
    func makeUIView(context: Context) -> some UIView {
        return controller.view
    }
    
    func updateUIView(_ uiView: UIViewType, context: Context) {}
    
    func sizeThatFits(_ proposal: ProposedViewSize, uiView: UIViewType, context: Context) -> CGSize? {
        return proposal.replacingUnspecifiedDimensions()
    }
}

我最初尝试使用

UIViewControllerRepresentable
,但由于某种原因,那个从未显示控件。

© www.soinside.com 2019 - 2024. All rights reserved.