当我将AVPlayerViewController
WrappedUIViewControllerRepresentable
作为视图的全屏背景放入时,它会强制主要内容视图忽略安全区域。
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)
)
}
}
有没有办法解决这个问题?