SwiftUI zIndex无法在ForEach中正确更新

时间:2019-09-13 08:02:27

标签: swift foreach swiftui xcode11

此问题发生在Xcode 11 GM中。

点击视图时,颜色将变为蓝色,并且应更新zIndex使其移到最前面。

在最上面的示例中,此方法工作正常,您将永远不会看到绿色视图与蓝色视图重叠。在下面的示例(使用ForEach)中,它无法正确重绘,并且蓝色视图停留在绿色后面。

虽然奇怪的是,如果您的底部示例处于错误状态,然后触摸顶部的任何视图,则底部会突然纠正自己。

有什么想法或解决方案吗?

struct ContentView: View {

    var body: some View {

        ZStack {
            // First example, working
            TestView().position(x: 100, y: 100)
            TestView().position(x: 200, y: 200)

            // Second example, not working
            ForEach(1..<3) { i in
                TestView().position(x: 100*CGFloat(i), y: 300 + 100*CGFloat(i))
            }
        }
    }
}

struct TestView: View {

    @State var isTapped = false

    var body: some View {

        return Text("Test Test Test")
            .frame(width: 150, height: 150)
            .background(isTapped ? Color.blue : Color.green)
            .zIndex(isTapped ? 100 : 0)
            .gesture(
                TapGesture()
                    .onEnded {
                        self.isTapped.toggle()
                }
            )
    }
}

0 个答案:

没有答案