0

当我将AVPlayerViewControllerWrappedUIViewControllerRepresentable作为视图的全屏背景放入时,它会强制主要内容视图忽略安全区域。

 var body: some View {
        VStack(spacing: 0) {
            HStack {
                Text("Some text")
                Spacer()
            }
            Spacer()
        }
        .padding(16)
        .foregroundColor(Color.white)
        .background(
            VideoPlayerController(videoURL: videoURL, isPlaying: $isPlaying)
                .edgesIgnoringSafeArea(.all)
        )
    }

在上面的示例中,文本忽略了安全区域。

视频播放器控制器:

struct VideoPlayerController: UIViewControllerRepresentable {
    typealias UIViewControllerType = AVPlayerViewController
    
    var videoURL: URL
    @Binding var isPlaying: Bool
    let showPlaybackControls = false
    
    func makeUIViewController(context: Context) -> AVPlayerViewController {
        let player = AVPlayer(url: videoURL)
        let playerController = AVPlayerViewController()
        
        playerController.player = player
        playerController.showsPlaybackControls = showPlaybackControls
        
        return playerController
    }
    
    func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {
        if isPlaying {
            uiViewController.player?.play()
        } else {
            uiViewController.player?.pause()
        }
    }
}

但是,如果我将背景设为普通视图,则文本不再忽略安全区域

struct ExerciseVideoScreen: View {
    let videoURL: URL
    @State var isPlaying: Bool = false
    
    var body: some View {
        VStack(spacing: 0) {
            HStack {
                Text("Some text")
                Spacer()
            }
            Spacer()
        }
        .padding(16)
        .foregroundColor(Color.white)
        .background(
            Color.red
                .edgesIgnoringSafeArea(.all)
        )
    }
}

有没有办法解决这个问题?

4

0 回答 0