我有一个视图,DotView
它由 3 个绿色圆圈clipped
和一个红色边框组成。我DragGesture
用来在容器视图中水平滑动它,它有一个蓝色边框,也是clipped
.
问题是,一旦我滑到某个点,3 个绿色圆圈就会消失。我怎样才能防止它们消失?有趣的是,如果我删除第一个clipped
也是唯一一个剪辑蓝色容器,圆圈不会消失。同样,如果我删除第二个clipped
也是唯一一个 clip DotView
,它们也不会消失。
这是我的代码:
/// 3 green circles, constrained to a red border
struct DotView: View {
var body: some View {
HStack {
ForEach(0..<3) { _ in
Circle()
.fill(Color.green)
.frame(width: 100, height: 100)
}
}
.frame(width: 250)
.border(Color.red)
.clipped() /// 1. make sure the green circles don't overflow
}
}
/// container for horizontal dragging, with a blue border
struct ContentView: View {
@State var offset = CGFloat(0)
var body: some View {
DotView()
.padding() /// add a small gap between the red and blue borders
.offset(x: offset, y: 0)
.border(Color.blue)
.clipped() /// 2. make sure `DotView` doesn't overflow the blue border
.gesture(
DragGesture(minimumDistance: 0) /// slide `DotView` left and right
.onChanged { offset = $0.translation.width }
)
}
}
消失效果在 中非常明显ForEach
,但在其他视图中也会出现。例如,当您将整个替换为 时会发生以下HStack
情况Circle().fill(Color.green).frame(width: 100, height: 100)
:
有什么方法可以让我使用clipped
不止一次,而不会产生奇怪的副作用?为什么它们只消失在左侧而不是右侧?或者,offset
是什么导致了问题?