【发布时间】:2021-08-21 01:16:06
【问题描述】:
我遇到了一个非常奇怪的问题,如果你有一个很深的 ViewBuilder 和 if 语句链,连同一个工具栏,工具栏中的某些项目会重复。
这是一张图片来说明我的意思(注意 2 个“按我!”按钮)
复现:(注意:我使用的是 macOS Monterey Beta 5 和 Xcode 13 Beta 5)
- 新建一个空白的 SwiftUI macOS 项目
- 将此代码粘贴到
ContentView:
struct ContentView: View {
var body: some View {
NavigationView {
Text("Sidebar")
SecondPanel()
}
}
}
struct SecondPanel: View {
@State var num = 0
@ViewBuilder var content: some View {
Text("Line 2")
Text("Line 3")
}
@ViewBuilder var contentWithToolbar: some View {
content
.toolbar {
Button(action: {
num += 1
}) {
Text("Press me!")
}
}
}
var body: some View {
if num == 0 {
contentWithToolbar
.navigationSubtitle("Num is zero!")
}
else {
contentWithToolbar
}
}
}
- 运行应用程序。你应该看到两个“按我!”按钮,即使我只有一个工具栏按钮!
我想知道这是怎么回事,有什么办法可以解决这个问题吗?
【问题讨论】:
-
尝试从按钮中删除视图构建器注释。如果我在创建视图时执行条件逻辑,我通常会使用它。既然你不是,没有注释应该没问题
-
@Jake 我试过删除它,但似乎没有帮助
-
好的……如何将内容视图构建器的内容包装在 A vstack 中?
-
@Jake 这似乎解决了问题,但最初我有一堆条件(因此是 ViewBuilder)
-
请不要编辑您的问题来宣布它已解决。这就是答案的用途。而且您已经发布了答案(这很棒!)。我相应地回滚了你的编辑。