自定义修改器阻止ScrollView滚动操作



我有一个Scrollview(相当基本的(

ScrollView(.vertical, showsIndicators: false, content: {
VStack(content: {
ForEach(self.elements, id: .self) { _ in
Rectangle()
.frame(height: 30)
.background(Color.green)
}
})
})
.bottomInnerShadow(color: Color.black.opacity(0.45), radius: 0.5)

我正在使用一个自定义的指定器定义如下

fileprivate extension View {
func bottomInnerShadow(color: Color, radius: CGFloat = 0.1) -> some View {
modifier(BottomInnerShadow(color: color, radius: min(max(0, radius), 1)))
}
}
private struct BottomInnerShadow: ViewModifier {
var color: Color = .gray
var radius: CGFloat = 0.1
private var colors: [Color] {
[color.opacity(0.49), color.opacity(0.0), .clear]
}
func body(content: Content) -> some View {
GeometryReader { geo in
content
.overlay(LinearGradient(gradient: Gradient(colors: self.colors), startPoint: .bottom, endPoint: .top)
.frame(height: self.radius * self.minSide(geo)),
alignment: .bottom)
}
}
func minSide(_ geo: GeometryProxy) -> CGFloat {
CGFloat(3) * min(geo.size.width, geo.size.height) / 2
}
}

它允许我创建一个阴影。这里的问题是它阻止了我的滚动视图操作。我无法再滚动阴影出现的位置。我试过allowsHitTesting(false)&.disabled(true),但它不起作用。

你们知道我怎么能越过那个吗?

提前感谢您对未来的任何帮助:D

PS:我已经检查了那个链接->如何禁用SwiftUI视图上的用户交互?还有苹果论坛上的链接(这里没有(。

只需将ViewModifier更改为

private struct BottomInnerShadow: ViewModifier {
var color: Color = .gray
var radius: CGFloat = 0.1
private var colors: [Color] {
[color.opacity(0.49), color.opacity(0.0), .clear]
}
func body(content: Content) -> some View {
GeometryReader { geo in
ZStack {
Rectangle().fill(Color.clear).overlay(LinearGradient(gradient: Gradient(colors: self.colors), startPoint: .bottom, endPoint: .top)
.frame(height: self.radius * self.minSide(geo)),
alignment: .bottom)
content
}
}
}
func minSide(_ geo: GeometryProxy) -> CGFloat {
CGFloat(3) * min(geo.size.width, geo.size.height) / 2
}
}

最新更新