我有一个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)
,但是没有用。
你们知道我如何超越它吗?</ p>
在此先感谢您的帮助:D
PS:我已经检查了该链接-> How to disable user interaction on SwiftUI view?以及Apple论坛上的链接(此处没有)。
答案 0 :(得分:0)
只需将 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
}
}