Force soft top scroll edge effect for banner and video info views

iOS 27 changes the default scroll edge effect style to hard, which
draws a sharp cutoff line over the channel banner and video info
gradient extending under the toolbar.
This commit is contained in:
Arkadiusz Fal
2026-07-18 10:40:31 +02:00
parent 3a8f91f88c
commit 74442f2764
3 changed files with 27 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
//
// View+SoftScrollEdgeEffect.swift
// Yattee
//
// iOS 27 changed the default scroll edge effect style from soft to hard,
// which draws a sharp dividing line under the toolbar. Views that extend
// a banner or gradient beneath the toolbar (channel header, video info)
// need the soft style so the artwork stays cleanly visible.
//
import SwiftUI
extension View {
/// Forces the soft (blur/fade) scroll edge effect on the top edge
/// for scroll views in this hierarchy. No-op before iOS 26/macOS 26.
@ViewBuilder
func softTopScrollEdgeEffect() -> some View {
if #available(iOS 26, macOS 26, tvOS 26, *) {
scrollEdgeEffectStyle(.soft, for: .top)
} else {
self
}
}
}

View File

@@ -368,6 +368,7 @@ struct ChannelView: View {
}
.background(viewBackgroundColor)
.ignoresSafeArea(edges: .top)
.softTopScrollEdgeEffect()
#if os(macOS)
.overlay(alignment: .top) {
legacyToolbarScrim
@@ -533,6 +534,7 @@ struct ChannelView: View {
}
.background(viewBackgroundColor)
.ignoresSafeArea(edges: .top)
.softTopScrollEdgeEffect()
#if os(macOS)
.overlay(alignment: .top) {
legacyToolbarScrim

View File

@@ -545,6 +545,7 @@ struct VideoInfoView: View {
#if !os(tvOS)
.scrollDismissesKeyboard(.interactively)
#endif
.softTopScrollEdgeEffect()
.modifier(VideoInfoScrollOffsetModifier(scrollOffset: $scrollOffset))
#if os(macOS)