SwiftUI - AVPlayerViewController Полноэкранный режим на tvOS - PullRequest
1 голос
/ 12 апреля 2020

Я могу представить AVPlayerViewController от SwiftUI, но есть некоторые отступы вокруг видео, и я хотел бы, чтобы оно было полноэкранным.

Из части SwiftUI есть следующее:

    var body: some View {
    NavigationView {
        List {
            ForEach(topicsArray) { topic in
                Section(header: Text(topic.title)) {
                    ForEach(0..<topic.shows.count) { index in
                        NavigationLink(destination: PlayerView(showID: topic.shows[index])) {
                            ShowCell(showID: topic.shows[index])
                        }
                        .navigationBarTitle("")
                        .navigationBarHidden(true)
                    }
                }
            }
        }
        .listStyle(GroupedListStyle())
        .padding()
    }.onAppear(perform: initialDataLoad)
}

Код, вызываемый из NavigationLink, который показывает, что игрок:

    struct PlayerView: UIViewControllerRepresentable {
       var showID:Int

       func makeUIViewController(context: Context) -> AVPlayerViewController {
           let pv = PlayerViewController()
           pv.showID = showID
           return pv
       }

       func updateUIViewController(_ viewController: AVPlayerViewController, context: Context) {

       }
   }

class PlayerViewController: AVPlayerViewController {
    var showID:Int! {
        didSet {
            setup()
        }
    }
    private var videoLaunch:VideoLaunch!

    private func setup() {
        videoLaunch = VideoLaunch(showID: showID,
                                  season: nil,
                                  episodeID: nil,
                                  selectedIndex: IndexPath(row: 0, section: 0),
                                  showType: .single,
                                  dataStructure: topics as Any,
                                  screenType: .live)

        playVideo()
    }

    private func playVideo() {
        guard let videoURL = self.videoLaunch.getMediaURL() else {print("Problem getting media URL");return}
        self.player = AVPlayer(url: videoURL)
        self.videoGravity = .resizeAspectFill
        self.player?.play()
    }

У меня есть попытался установить границы и использовать modalpresentationstyle для полноэкранного режима, но ни один не оказал никакого влияния. Вокруг видео по-прежнему есть граница из 10 точек.

1 Ответ

1 голос
/ 13 апреля 2020

Мне удалось решить эту проблему, вставив в класс PlayerViewController следующее:

    override func viewDidLayoutSubviews() {
       self.view.bounds = UIScreen.main.bounds
    }
...