Xcode 12.3 将任何新内容放入新预览中

Posted

技术标签:

【中文标题】Xcode 12.3 将任何新内容放入新预览中【英文标题】:Xcode 12.3 puts any new piece of content in a new preview 【发布时间】:2021-02-13 07:43:54 【问题描述】:

import SwiftUI

struct ContentView: View 
    var body: some View 
        Text("Hello")
        Text("World")
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    


上面的代码产生了两个预览窗口:一个带有文本“Hello”,第二个窗口包含“World”

每次我添加诸如 Text() 之类的东西时,它都会出现在第二个预览窗口中。添加更多元素会自动导致新的预览窗口。 PreviewProvider 中的代码保持不变,因此它不是重复的预览,它只是每个元素的单独预览...

我尝试重新启动 Xcode,更改模拟器设备,创建新项目 - 没有任何变化。

它是在我在一个项目中添加重复预览后开始的,然后通过删除 PreviewProvider 中的适当行将其删除。之后,所有新项目或旧项目中的所有新文件都会出现这种奇怪的行为。

【问题讨论】:

我会假设这种情况正在发生,因为body 通常假设如果您要返回多个这样的元素,您希望它们在VStack 中,但预览不够智能为了那个原因。如果将两个文本视图包装在 VStack 中,问题会消失吗? 这是预期行为。正如@jnpdx 所说,将您的内容包装在VStack 中。 感谢大家的帮助。我以为我弄坏了一些东西,但看起来一切都很好。我已经快一年没用 SwiftUI 了…… 【参考方案1】:

body 在 SwiftUI 2.0 中默认是 @ViewBuilder,所以它只是内联生成一组视图,因此有两个 Text 元素你有两个预览。如果你只想要一个预览,你的body 应该有一个顶视图,比如

struct ContentView: View 
    var body: some View 
      HStack 
        Text("Hello")
        Text("World")
      
    

【讨论】:

【参考方案2】:

您必须将两个 Text 元素放入容器中,例如VStack

【讨论】:

以上是关于Xcode 12.3 将任何新内容放入新预览中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中将标头放入框架中?

XCode10的新变化

Xcode 12.3 命令协同设计失败,退出代码为非零

可可豆荚的 Xcode 12.3 问题

C# 9.0 新特性预览

Xcode 12.3 在 SwiftUI 项目启动时冻结