diff --git a/Shared/Player/Controls/VideoDetailsOverlay.swift b/Shared/Player/Controls/VideoDetailsOverlay.swift index da3b97bd..b672a097 100644 --- a/Shared/Player/Controls/VideoDetailsOverlay.swift +++ b/Shared/Player/Controls/VideoDetailsOverlay.swift @@ -7,6 +7,7 @@ struct VideoDetailsOverlay: View { var body: some View { VideoDetails(video: controls.player.videoForDisplay, fullScreen: fullScreenBinding, sidebarQueue: .constant(false)) .clipShape(RoundedRectangle(cornerRadius: 4)) + .id(controls.player.currentVideo?.cacheKey) } var fullScreenBinding: Binding { diff --git a/Shared/Player/Video Details/VideoDetails.swift b/Shared/Player/Video Details/VideoDetails.swift index 5393a1a5..53daf320 100644 --- a/Shared/Player/Video Details/VideoDetails.swift +++ b/Shared/Player/Video Details/VideoDetails.swift @@ -264,72 +264,65 @@ struct VideoDetails: View { } var pageView: some View { - ScrollViewReader { proxy in - ScrollView(.vertical, showsIndicators: false) { - LazyVStack { - pageMenu - .id("top") - .padding(5) + ScrollView(.vertical, showsIndicators: false) { + LazyVStack { + pageMenu + .padding(5) - switch page { - case .info: - Group { - if let video { - VStack(alignment: .leading, spacing: 10) { - if !player.videoBeingOpened.isNil && (video.description.isNil || video.description!.isEmpty) { - VStack { - ProgressView() - .progressViewStyle(.circular) - } - .frame(maxWidth: .infinity) - } else if let description = video.description, !description.isEmpty { - VideoDescription(video: video, detailsSize: detailsSize) - } else if !video.isLocal { - Text("No description") - .font(.caption) - .foregroundColor(.secondary) - } - - if video.isLocal || showInspector == .always { - InspectorView(video: player.videoForDisplay) - } - - if !sidebarQueue, - !(player.videoForDisplay?.related.isEmpty ?? true) - { - RelatedView() - .padding(.top, 20) + switch page { + case .info: + Group { + if let video { + VStack(alignment: .leading, spacing: 10) { + if !player.videoBeingOpened.isNil && (video.description.isNil || video.description!.isEmpty) { + VStack { + ProgressView() + .progressViewStyle(.circular) } + .frame(maxWidth: .infinity) + } else if let description = video.description, !description.isEmpty { + VideoDescription(video: video, detailsSize: detailsSize) + } else if !video.isLocal { + Text("No description") + .font(.caption) + .foregroundColor(.secondary) + } + + if video.isLocal || showInspector == .always { + InspectorView(video: player.videoForDisplay) + } + + if !sidebarQueue, + !(player.videoForDisplay?.related.isEmpty ?? true) + { + RelatedView() + .padding(.top, 20) } - .padding(.bottom, 60) } + .padding(.bottom, 60) } - .onChange(of: player.currentVideo?.cacheKey) { _ in - proxy.scrollTo("top") + } + .onAppear { + if video != nil, !pageAvailable(page) { page = .info } - .onAppear { - if video != nil, !pageAvailable(page) { - page = .info - } - } - .transition(.opacity) - .animation(nil, value: player.currentItem) - .padding(.horizontal) - #if os(iOS) - .frame(maxWidth: YatteeApp.isForPreviews ? .infinity : maxWidth) - #endif - - case .queue: - PlayerQueueView(sidebarQueue: false) - .padding(.horizontal) - - case .comments: - CommentsView(embedInScrollView: false) - .onAppear { - comments.loadIfNeeded() - } } + .transition(.opacity) + .animation(nil, value: player.currentItem) + .padding(.horizontal) + #if os(iOS) + .frame(maxWidth: YatteeApp.isForPreviews ? .infinity : maxWidth) + #endif + + case .queue: + PlayerQueueView(sidebarQueue: false) + .padding(.horizontal) + + case .comments: + CommentsView(embedInScrollView: false) + .onAppear { + comments.loadIfNeeded() + } } } } diff --git a/Shared/Player/VideoPlayerView.swift b/Shared/Player/VideoPlayerView.swift index 6556340b..c3d75e83 100644 --- a/Shared/Player/VideoPlayerView.swift +++ b/Shared/Player/VideoPlayerView.swift @@ -343,6 +343,7 @@ struct VideoPlayerView: View { player.setNeedsDrawing(true) } } + .id(player.currentVideo?.cacheKey) .transition(.opacity) } }