SwiftUI 画布预览为一个视图显示多个视图

问题描述

我的 SwiftUI 预览将一个视图显示为 3 个不同的预览屏幕,它应该是一个具有组合视图的屏幕...

我做错了什么?

谢谢!

查看附带的 3 个单独预览视图的图像。

enter image description here

struct SignupSelfie: View {
    @Observedobject var signupImagesviewmodel = SignupNavigationviewmodel()
    @State private var isValid = false
        
    var body: some View {
      
        vstack {
           Button("capture") { /* action code here */ }
              .background(
                  NavigationLink("",destination: SignupIdView(),isActive: $isValid)
                )
            }.navigationBarBackButtonHidden(true)
            Spacer()
            Text("capture selfie")
        }
}


struct SignupSelfie_Previews: PreviewProvider {
    static var previews: some View {
        SignupSelfie()
    }
}

解决方法

SwiftUI 预览将在视图树的根部显示每个节点的预览。当它在预览内部时会更清楚,例如:

struct SignupSelfie_Previews: PreviewProvider {
    static var previews: some View {
        SignupSelfie()
        SignupSelfie2()
        SignupSelfie3()
    }
}

在上面,很清楚为什么会有 3 个预览。

在您的示例中,正如评论者所提到的,它发生在您的 SignupSelfie 中,因为您的根有 3 个节点:

  1. VStack
  2. Spacer()
  3. Text("capture selfie")

我的猜测是您的缩进可能使它看起来像 SpacerText 位于 VStack 内——一个很好的技巧是选择您的代码并使用 {{ 1}} 让 Xcode 自动格式化——它会修复这样的缩进问题并揭示问题。

在这种情况下,您可能只想将所有内容都放在 Ctrl-i 中。在其他情况下,很高兴知道您也可以避免这个问题,并通过将多个节点包装在 VStack

中将它们变成一个