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 将任何新内容放入新预览中的主要内容,如果未能解决你的问题,请参考以下文章