mirror of
https://github.com/yattee/yattee.git
synced 2026-07-20 14:22:02 +00:00
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:
24
Yattee/Extensions/View+SoftScrollEdgeEffect.swift
Normal file
24
Yattee/Extensions/View+SoftScrollEdgeEffect.swift
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -368,6 +368,7 @@ struct ChannelView: View {
|
|||||||
}
|
}
|
||||||
.background(viewBackgroundColor)
|
.background(viewBackgroundColor)
|
||||||
.ignoresSafeArea(edges: .top)
|
.ignoresSafeArea(edges: .top)
|
||||||
|
.softTopScrollEdgeEffect()
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
.overlay(alignment: .top) {
|
.overlay(alignment: .top) {
|
||||||
legacyToolbarScrim
|
legacyToolbarScrim
|
||||||
@@ -533,6 +534,7 @@ struct ChannelView: View {
|
|||||||
}
|
}
|
||||||
.background(viewBackgroundColor)
|
.background(viewBackgroundColor)
|
||||||
.ignoresSafeArea(edges: .top)
|
.ignoresSafeArea(edges: .top)
|
||||||
|
.softTopScrollEdgeEffect()
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
.overlay(alignment: .top) {
|
.overlay(alignment: .top) {
|
||||||
legacyToolbarScrim
|
legacyToolbarScrim
|
||||||
|
|||||||
@@ -545,6 +545,7 @@ struct VideoInfoView: View {
|
|||||||
#if !os(tvOS)
|
#if !os(tvOS)
|
||||||
.scrollDismissesKeyboard(.interactively)
|
.scrollDismissesKeyboard(.interactively)
|
||||||
#endif
|
#endif
|
||||||
|
.softTopScrollEdgeEffect()
|
||||||
.modifier(VideoInfoScrollOffsetModifier(scrollOffset: $scrollOffset))
|
.modifier(VideoInfoScrollOffsetModifier(scrollOffset: $scrollOffset))
|
||||||
|
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
|
|||||||
Reference in New Issue
Block a user