首页 > 解决方案 > SwiftUI zIndex 没有在 ForEach 内正确更新

问题描述

此问题发生在 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()
                }
            )
    }
}

标签: swiftforeachswiftuixcode11

解决方案


推荐阅读