SwiftUI VideoPlayer full screen dismiss button missing on iOS 16+

Viewed 50

I am using a .fullScreenCover to present a VideoPlayer view. On iOS 15 and below, doing so shows the close button in the top-left, like below:

enter image description here

But on iOS 16, it doesn't seem to appear.

enter image description here

Code is below:

.fullScreenCover(
        isPresented: $showVideoSheet,
        onDismiss: {
            selectedVideo = nil
        },
        content: {
            if let video = selectedVideo {
                VideoPlayerView(video: video)
            }
        }
    )

VideoPlayerView is below:

struct VideoPlayerView: View {

    @StateObject var model: VideoPlayerViewModel
    let video: VideoModel

    init(video: VideoModel) {
        self._model = StateObject(wrappedValue: VideoPlayerViewModel(video: video))
        self.video = video
    }

    var body: some View {
        if let player = model.player {
            VideoPlayer(player: player)
                .ignoresSafeArea()
        }
    }
}

The view model just loads the AVPlayer etc.

Any suggestions?

1 Answers

You can make your own close button.

@State var shouldShowVideoPlayer = false

var body: some View {
    Text("Example")
    .fullScreenCover(
        isPresented: $shouldShowVideoPlayer,
        onDismiss: {
            selectedVideo = nil
        },
        content: {
            ZStack(alignment: .topLeading) {
                if let video = selectedVideo {
                    VideoPlayerView(video: video)
                }

                Button {
                    shouldShowVideoPlayer = false
                } label: {
                    Image(systemName: "xmark")
                }
                .background(Color.white)
                .padding(20)
            }
        }
    )
}
Related