在Xcode 14.3.1中使用SwiftUI和预览,为什么预览不显示我的两个视图?(它在单独的预览中显示它们)

b0zn9rqh  于 2023-06-24  发布在  Swift
关注(0)|答案(1)|浏览(145)

我的应用程序由两个视图组成。当我在模拟器上运行它时,它看起来像下面这样(减去红色条-我将其添加到图像中以使解释更容易):

红线上方的所有控件都在一个视图中,红线下方的一个控件(绿色的OtherOne)在另一个视图中。
当我运行应用程序时,它看起来就像你在那张图片中看到的那样。
但是,当我预览时,我会在XCode中看到两个不同的View页面。
它看起来像这样:

我必须单击顶部的每个(ContentView)气泡,这样我就可以分别看到每个气泡。

问题

我想知道为什么预览不显示它们合并-同样的方式,我看到他们在实际的应用程序?
我的Swift app看起来像:

import SwiftUI

@main
struct FirstSwiftUIApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
            OtherView()
        }
    }
}

我的ContentView文件中有两个单独的视图(ContentViewOtherView),看起来如下所示:

import SwiftUI

// preview moved to the top so you can see it contains both Views
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
        OtherView()
    }  
}

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
            Button(action:
                    {print("it worked")}){Text("simple")}
            Button(action:{
                if let url = URL(string:"https://newlibre.com/librestore"){
                UIApplication.shared.open(url)
            }
                
            }){
                Text("Load NewLibre")
            }.padding(5)
        }
        .padding()
    }
}

struct OtherView: View{
    var body : some View{
        VStack{
            Button(action:
                    {print("This is the other one!")})
            {
                Text("OtherOne")
                    .font(.title2)
                    .foregroundColor(.green)
                
            }
            
        }.padding()
    }
}
cdmah0mi

cdmah0mi1#

您有两个预览,因为您当前在previews的根目录中有两个项目:

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView() // <-- 1
        OtherView()   // <-- 2
    }  
}

为了让它们显示在 one 预览中,您应该有一个根目录(例如,在VStack中):

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        VStack {
           ContentView()
           OtherView()
        }
    }  
}

相关问题