🧑‍💻/Swift

AVPlayerViewController 시계, 배터리 상태표시줄 표시 방법

유리맥 2024. 8. 16. 17:14
반응형

 

AVKit의 AVPlayerViewController를 SwiftUI에서 사용하던 중

상단 Safe Area 영역에 시간, 배터리 등이 표시되지 않는 문제가 발생했습니다. 이거 사실 버그 아닌가요

상태표시줄

 

struct MyVideoPlayer: UIViewControllerRepresentable {
    let player: AVPlayer
    
    func makeUIViewController(context: Context)-> AVPlayerViewController {
        let controller = AVPlayerViewController()
        controller.player = player
        return controller
    }
    
    func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { }
}

 

 

상태표시줄을 표시하는 방법은 두 가지 시도해볼 수 있는데요.

 

1. UIViewRepresentable로 교체

UIViewControllerRepresentable로 구현된 MyVideoPlayer를 UIViewRepresentable로 교체합니다.

struct MyVideoPlayerView: UIViewRepresentable {
    let player: AVPlayer
    
    func makeUIView(context: Context) -> UIView {
        let controller = AVPlayerViewController()
        controller.player = player
        return controller.view
    }

    func updateUIView(_ uiView: UIView, context: Context) { }
}

 

 

2. prefersStatusBarHidden 값 변경

AVPlayerViewController의 prefersStatusBarHidden 값을 false로 오버라이드해서 숨기지 않도록 합니다.

간단한 방법이지만 AVPlayerViewController를 여러 개 띄우고, 상태표시줄을 표시하지 않는 화면이 있다면

return 값을 수정하거나 방법1로 고쳐야겠네요.

extension AVPlayerViewController {
    /// 상단 상태표시줄 숨김
    open override var prefersStatusBarHidden: Bool {
        return false
    }
}

 

반응형