From b5ffa5b267a1cb7ab93ad68382561e11b4ffc6be Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Tue, 30 Nov 2021 23:58:11 +0100 Subject: [PATCH] Fix sheets and covers on iOS 14 --- Shared/Navigation/ContentView.swift | 93 ++++++++++++++++------------ Shared/Player/VideoDetails.swift | 20 +++--- Shared/Playlists/PlaylistsView.swift | 22 ++++--- 3 files changed, 78 insertions(+), 57 deletions(-) diff --git a/Shared/Navigation/ContentView.swift b/Shared/Navigation/ContentView.swift index ea3749df..828755be 100644 --- a/Shared/Navigation/ContentView.swift +++ b/Shared/Navigation/ContentView.swift @@ -24,7 +24,7 @@ struct ContentView: View { #endif var body: some View { - Section { + Group { #if os(iOS) if horizontalSizeClass == .compact { AppTabNavigation() @@ -49,55 +49,66 @@ struct ContentView: View { .environmentObject(subscriptions) .environmentObject(thumbnailsModel) - .sheet(isPresented: $navigation.presentingWelcomeScreen) { - WelcomeScreen() - .environmentObject(accounts) - .environmentObject(navigation) - } + // iOS 14 has problem with multiple sheets in one view + // but it's ok when it's in background + .background( + EmptyView().sheet(isPresented: $navigation.presentingWelcomeScreen) { + WelcomeScreen() + .environmentObject(accounts) + .environmentObject(navigation) + } + ) #if os(iOS) - .fullScreenCover(isPresented: $player.presentingPlayer) { - VideoPlayerView() - .environmentObject(accounts) - .environmentObject(instances) - .environmentObject(navigation) - .environmentObject(player) - .environmentObject(playlists) - .environmentObject(subscriptions) - .environmentObject(thumbnailsModel) - } + .background( + EmptyView().fullScreenCover(isPresented: $player.presentingPlayer) { + videoPlayer + } + ) #elseif os(macOS) - .sheet(isPresented: $player.presentingPlayer) { - VideoPlayerView() - .frame(minWidth: 900, minHeight: 800) - .environmentObject(accounts) - .environmentObject(instances) - .environmentObject(navigation) - .environmentObject(player) - .environmentObject(playlists) - .environmentObject(subscriptions) - .environmentObject(thumbnailsModel) - } + .background( + EmptyView().sheet(isPresented: $player.presentingPlayer) { + videoPlayer + .frame(minWidth: 900, minHeight: 800) + } + ) #endif #if !os(tvOS) .handlesExternalEvents(preferring: Set(["*"]), allowing: Set(["*"])) .onOpenURL(perform: handleOpenedURL) - .sheet(isPresented: $navigation.presentingAddToPlaylist) { - AddToPlaylistView(video: navigation.videoToAddToPlaylist) - .environmentObject(playlists) - } - .sheet(isPresented: $navigation.presentingPlaylistForm) { - PlaylistFormView(playlist: $navigation.editedPlaylist) - .environmentObject(accounts) - .environmentObject(playlists) - } - .sheet(isPresented: $navigation.presentingSettings, onDismiss: openWelcomeScreenIfAccountEmpty) { - SettingsView() - .environmentObject(accounts) - .environmentObject(instances) - } + .background( + EmptyView().sheet(isPresented: $navigation.presentingAddToPlaylist) { + AddToPlaylistView(video: navigation.videoToAddToPlaylist) + .environmentObject(playlists) + } + ) + .background( + EmptyView().sheet(isPresented: $navigation.presentingPlaylistForm) { + PlaylistFormView(playlist: $navigation.editedPlaylist) + .environmentObject(accounts) + .environmentObject(playlists) + } + ) + .background( + EmptyView().sheet(isPresented: $navigation.presentingSettings, onDismiss: openWelcomeScreenIfAccountEmpty) { + SettingsView() + .environmentObject(accounts) + .environmentObject(instances) + } + ) #endif } + private var videoPlayer: some View { + VideoPlayerView() + .environmentObject(accounts) + .environmentObject(instances) + .environmentObject(navigation) + .environmentObject(player) + .environmentObject(playlists) + .environmentObject(subscriptions) + .environmentObject(thumbnailsModel) + } + func configure() { SiestaLog.Category.enabled = .common SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared) diff --git a/Shared/Player/VideoDetails.swift b/Shared/Player/VideoDetails.swift index f260aa4f..b506f2c9 100644 --- a/Shared/Player/VideoDetails.swift +++ b/Shared/Player/VideoDetails.swift @@ -318,17 +318,21 @@ struct VideoDetails: View { .foregroundColor(.secondary) } } - .sheet(isPresented: $presentingAddToPlaylist) { - if let video = video { - AddToPlaylistView(video: video) + .background( + EmptyView().sheet(isPresented: $presentingAddToPlaylist) { + if let video = video { + AddToPlaylistView(video: video) + } } - } + ) #if os(iOS) - .sheet(isPresented: $presentingShareSheet) { - if let shareURL = shareURL { - ShareSheet(activityItems: [shareURL]) + .background( + EmptyView().sheet(isPresented: $presentingShareSheet) { + if let shareURL = shareURL { + ShareSheet(activityItems: [shareURL]) + } } - } + ) #endif } diff --git a/Shared/Playlists/PlaylistsView.swift b/Shared/Playlists/PlaylistsView.swift index 3d632d22..b08d352f 100644 --- a/Shared/Playlists/PlaylistsView.swift +++ b/Shared/Playlists/PlaylistsView.swift @@ -58,14 +58,20 @@ struct PlaylistsView: View { .environmentObject(accounts) } #else - .sheet(isPresented: $showingNewPlaylist, onDismiss: selectCreatedPlaylist) { - PlaylistFormView(playlist: $createdPlaylist) - .environmentObject(accounts) - } - .sheet(isPresented: $showingEditPlaylist, onDismiss: selectEditedPlaylist) { - PlaylistFormView(playlist: $editedPlaylist) - .environmentObject(accounts) - } + .background( + EmptyView() + .sheet(isPresented: $showingNewPlaylist, onDismiss: selectCreatedPlaylist) { + PlaylistFormView(playlist: $createdPlaylist) + .environmentObject(accounts) + } + ) + .background( + EmptyView() + .sheet(isPresented: $showingEditPlaylist, onDismiss: selectEditedPlaylist) { + PlaylistFormView(playlist: $editedPlaylist) + .environmentObject(accounts) + } + ) #endif .toolbar { ToolbarItemGroup {