SwiftUI TabView 亮度视图垂直位置

SwiftUI TabView brightness views vertical location

我试图在 SwiftUI 中更改 TabView 的亮度,但每当亮度切换时,子视图都会更改其垂直位置。这对我来说非常神秘,因为亮度对视图位置有任何影响似乎很奇怪。

如果您一直在关注我过去的几个问题,您可能会意识到我想要更改亮度,因为我想在新视图向上滑动时调暗背景视图(按下按钮)。这就是为什么在示例代码中,我们必须包含 Z-Stack。

示例代码:

struct ContentView: View {
    @State var press: Bool = Bool()
    
    var body: some View {
        ZStack {
            TabView {
                NavigationView {
                    Button(action: { press.toggle() }) {
                        Text("Toggle")
                    }
                }
                .tabItem {
                    Image(systemName: "square.stack").font(.title)
                    Text("View One")
                }
                
                NavigationView {
                    Button(action: { press.toggle() }) {
                        Text("Toggle")
                    }
                }
                .tabItem {
                    Image(systemName: "checkmark.square")
                    Text("View Two")
                }
            }
            .brightness(press ? -0.1: 0)
        }
    }
}

问题在于 TabView 中的多个 NavigationViews 您实际上应该在视图层次结构的根部只有 1 个 NavigationView。不鼓励使用多个 NavigationViews 并且会导致意想不到的结果,如下所示。因此,body里面应该是:

NavigationView {
    ZStack {
        TabView {
            Button(action: { press.toggle() }) {
                Text("Toggle")
            }
            .tabItem {
                Image(systemName: "square.stack")
                Text("View One")
            }
            
            Button(action: { press.toggle() }) {
                Text("Toggle")
            }
            .tabItem {
                Image(systemName: "checkmark.square")
                Text("View Two")
            }
        }
        .brightness(press ? -0.1: 0)
    }
}