SwiftUI:在预览中渲染一个对象,在设备上渲染另一个

时间:2020-01-12 18:27:17

标签: ios swiftui

我正在尝试做这样的事情:

        #if DEBUG
            Color.black.edgesIgnoringSafeArea(.all)
        #else
            // render camera view
        #endif

但是我真的很想做这样的事情:

        #if PREVIEW
            Color.black.edgesIgnoringSafeArea(.all)
        #else
            // render camera view
        #endif

我希望预览窗口将仅显示黑色背景(当然,因为预览中不支持Camera),然后在物理设备上运行项目时显示摄像机。

但是,无论何时您不在DEBUG模式下运行,Release都是正确的。我曾考虑过向构造函数添加一个isPreview参数,并使用默认值false并将true传递到视图的PreviewProvider内部,但这似乎是一种向后的方法

是否只有#if DEBUG等效于预览版?

1 个答案:

答案 0 :(得分:0)

我不喜欢它,但是一种实现方法似乎是设置文件范围的变量isPreview,将其实例化为false,然后将其更改为truePreviewProvider的{​​{1}}方法中,然后根据该值有条件地呈现视图。

实例化值并在previews内对其进行更改

PreviewProvider

然后使用它有条件地渲染fileprivate var isPreview = false struct ContentView_Previews: PreviewProvider { static var previews: some View { isPreview = true return MyView() } } 中的内容:

MyView

我希望有人知道更干净的方法。